Исключить файлы с веб-сайта в Visual Studio

Можно ли исключить папку или файлы при публикации веб-сайта в Visual Studio 2005? У меня есть различные ресурсы, которые я хочу держать под рукой в ​​обозревателе решений, например, альтернативные файлы конфигурации для различных сред, но я действительно не хочу публиковать их на сервере. Есть ли способ исключить их? При использовании других типов проектов, таких как сборка .dll, я могу установить для свойства Build Action файла значение "Нет" и его свойство "Копировать в выходной каталог" в "Не копировать". Я не могу найти никаких похожих настроек для файлов на веб-сайте.

Если среда IDE не предлагает эту функцию, у кого-нибудь есть хорошая методика для обработки таких файлов?

Ответ 1

Если вы можете идентифицировать файлы на основе расширения, вы можете настроить это, используя тег buildproviders в файле web.config. Добавьте расширение и сопоставьте его с ForceCopyBuildProvider. Например, чтобы настроить файлы .xml для копирования с действием публикации, вы должны сделать следующее:

<configuration>...
    <system.web>...
        <compilation>...
            <buildProviders>
                <remove extension=".xml" />
                <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" />
            </buildProviders>

Чтобы не копировать данный файл, вы бы сделали то же самое, но в качестве типа используйте System.Web.Compilation.IgnoreFileBuildProvider.

Ответ 2

Исключите файлы и папки, добавив элементы ExcludeFilesFromDeployment и ExcludeFoldersFromDeployment в файл проекта (.csproj,.vbproj и т.д.). Добавьте их в любое место в соответствующем PropertyGroup (Debug, Release и т.д.), Как показано ниже:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
  ... 
  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
  <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 
</PropertyGroup>

Подстановочные знаки поддерживаются.

Чтобы объяснить пример выше:

  • Первый ExcludeFilesFromDeployment исключает File1.aspx (в корне проекта) и Folder2\File2.aspx (Folder2 находится в корне проекта)
  • Второй ExcludeFilesFromDeployment исключает все файлы в любой папке с именем .svn и любой из ее подпапок
  • ExcludeFoldersFromDeployment исключает папки с именами Folder1 (в корне проекта) и Folder2\Folder2a (Folder2 в корне проекта)

Для получения дополнительной информации см. сообщение в блоге MSDN Веб-развертывание: исключение файлов и папок через файл проекта веб-приложений

Ответ 3

Удивительно, что ответ на Visual Studio 2012 здесь отсутствует:

  • Ответ с зеленой галочкой - это не ответ.

  • Самый высокий ответ "up up" ссылается на статью с 2010 года и говорит, что вам нужно отредактировать файл проекта csproj, который теперь некорректен. Я добавил XML-элемент ExcludeFoldersFromDeployment в свой файл csproj Visual Studio 2012, и он ничего не сделал, этот элемент считался недействительным, потому что ExcludeFoldersFromDeployment был перемещен в файл .pubxml, это похоже.

Для веб-приложений и веб-сайтов вы редактируете файл .pubxml!

Вы можете следовать моему ответу или попробовать это руководство, которое я нашел позже: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure-on-iis-and-skip-deleting-it-with-msdeployskiprules.html#sthash.MSsQD8U1.dpbs

Да, вы можете сделать это не только для веб-сайтов, но и для веб-сайтов. Я долгое время в Интернете искал эту неуловимую возможность исключения с веб-сайта Visual Studio (проект НЕ веб-сайта) и ранее заключил, что это невозможно, но похоже, что это:

В файле [mypublishwebsitename].pubxml, найденном в ~/Свойства/PublishProfiles для проектов веб-приложений и ~/App_Data/PublishProfiles для веб-сайтов, просто добавьте:

  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
 <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>

в качестве дочерних элементов основного элемента <PropertyGroup> в вашем файле .pubxml. Не нужно добавлять новый элемент, если вы не задаете определенный тип сборки, например, выпуск или отладка.

НО ПОДОЖДИТЕ!!!

Если вы удаляете файлы со своего целевого/целевого сервера со следующей настройкой в ​​настройке публикации:

enter image description here

Затем процесс Web Publish удалит на вашем исходном/целевом сервере все, что угодно, как элемент, который вы указали в <ExcludeFoldersFromDeployment> и <ExcludeFilesFromDeployment>!

MsDeploy Skip Rules для спасения:

Во-первых, Web Publish использует что-то другое, кроме MSBuild для публикации (называемое Task IO или что-то в этом роде), но у него есть ошибка и не будет распознавать правила пропуска, поэтому вы должны добавить в свой .pubxml:

<PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>

Я бы сохранил <WebPublishMethod> в своем собственном <PropertyGroup>, вы бы подумали, что у вас может быть только один элемент <PropertyGroup> в вашем .pubxml, но мои правила пропуска не вызывались, пока я не переместил <WebPublishMethod> в свой собственный <PropertyGroup>. Да, сумасшедший, но факт, что вам нужно сделать все это для публикации в Интернете, чтобы исключить, а также не удалять папку/файл на вашем сервере, является безумным.

Теперь мои фактические объявления SkipRules, ExcludeFolders и ExcludeFiles в моем .pubxml:

<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
 <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>

И теперь правила пропуска (<Target> являются дочерними элементами <Project> в вашем .pubxml): ( Вы можете оставить <SkipAction> пустым, чтобы пропустить для всех действий, но я не тестировал это и не уверен.

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipConfigFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipPhotosFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Photos</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Web\.config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Temp</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

И, пожалуйста, не забудьте выйти из . в правило FilePath Skip с обратным слэшем.

Ответ 4

Я боролся с той же проблемой и, наконец, нажал триггер, чтобы преобразовать веб-сайт в веб-приложение. Как только я это сделал, у меня появились все преимущества IDE, такие как сборка, и она скомпилировалась быстрее для загрузки (более не проверяя веб-сайт...).

Шаг 1: Преобразуйте свой "веб-сайт" в "веб-приложение". Чтобы преобразовать его, я просто создал новое "веб-приложение", сдул все файлы, которые он создал автоматически, и скопировал и вставил мой веб-сайт. Это сработало хорошо. Обратите внимание, что в файлах отчетов должно быть указано, что для их действия по сборке установлено значение "Содержимое" вместо "none".

Шаг 2. Теперь вы можете установить любое свойство "Build Action".

Надеюсь, что это поможет.

Ответ 5

В Visual Studio 2013 я нашел ответ Кейта, добавив элемент ExcludeFoldersFromDeployment в файл проекта, не работал (я не читал ответ Брайана Огдена, который говорит об этом). Тем не менее, я обнаружил, что могу исключить текстовый файл при публикации в Visual Studio 2013, просто установив следующие свойства в самом текстовом файле:

1) Действие сборки: Нет

2) Копировать в выходной каталог: не копировать

Сначала я попытался самостоятельно установить свойство Copy to Output Directory, но это не сработало, если для параметра "Действие сборки" было установлено значение по умолчанию "Содержимое". Когда я устанавливаю действие сборки в None, текстовый файл больше не копируется в папку назначения при публикации.

Чтобы просмотреть эти свойства в графическом интерфейсе Visual Studio, в обозревателе решений щелкните правой кнопкой мыши файл, который вы хотите исключить, и выберите "Свойства" в контекстном меню.

Ответ 6

Думаю, у вас есть только два варианта:

  • Используйте команду "Исключить из проекта" особенность. Это не идеально, потому что элемент проекта будет исключен из любые интегрированные операции управления источником IDE. Вам нужно будет нажать "Показать все Кнопка "Файлы" в окне "Решение" если вам нужно увидеть файлы в Обозреватель решений, но это также показывает файлы и папки, которые вы не заинтересованных.
  • Используйте событие post-build script для удалить любые объекты проекта, которые вы не хотят быть опубликованы (если вы публикация в локальной папке, тогда загрузка на сервер).

Я прошел через это раньше и не мог придумать ничего действительно элегантного.

Ответ 7

Функция, которую вы ищете, существует, если ваш проект создан как "веб-приложение". "Проекты" веб-сайта - это всего лишь коллекция файлов, которые считаются 1:1, с тем, что развертывается на веб-сервере.

В терминах функциональности оба они одинаковы, однако веб-приложение компилирует весь исходный код в DLL, вместо файлов голого исходного кода, которые копируются на веб-сервер и скомпилированы по мере необходимости.

Ответ 8

Для Visual Studio 2017, WebApp Publish, сначала создайте стандартный профиль публикации файловой системы. Перейдите в папку App_Data\PublishProfiles\и отредактируйте файл [profilename].pubxml.

добавлять

<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>

под тегом <PropertyGroup> Вы можете указать этот тег только один раз, в противном случае он будет принимать только последние значения.

Пример:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>True</ExcludeApp_Data>
    <publishUrl>C:\inetput\mysite</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <ExcludeFilesFromDeployment>web.config;mysite.sln;App_Code\DevClass.cs;</ExcludeFilesFromDeployment>
  </PropertyGroup>
</Project>

Убедитесь, что для тега DeleteExistingFiles установлено значение False

Ответ 9

В Visual Studio 2017 (15.9.3 в моем случае) манипуляции с файлом .csproj действительно работают отлично! Нет необходимости изменять pubxml.

Затем вы можете создать довольно хорошие настройки в .csproj-File, используя условие PropertyGroup, например:

  <PropertyGroup Condition="$(Configuration.StartsWith('Pub_'))">
    <ExcludeFoldersFromDeployment>Samples</ExcludeFoldersFromDeployment>
  </PropertyGroup>

исключает папку "Samples" из всех развертываний с конфигурациями, начинающимися с "Pub _"...

Ответ 10

Как современный ответ, в Visual Studio 2017 с ядром .net:

Вы можете исключить из публикации как в csproj, где CopyToPublishDirectory никогда не бывает.

  <ItemGroup>
    <Content Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="appsettings.Local.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </Content>
  </ItemGroup>

Это обсуждается более подробно здесь: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2

<PropertyGroup>
    <ExcludeFilesFromDeployment>appsettings.Local.json</ExcludeFilesFromDeployment>
</PropertyGroup>

Предыдущие предложения не помогли мне, я полагаю, потому что Visual Studio сейчас использует другой механизм публикации внизу, я полагаю, с помощью инструмента "dotnet publish" cli или его эквивалента внизу.