Исключение файлов из публикации веб-узла в Visual Studio


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

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

8 70

8 ответов:

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

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

чтобы сохранить данный файл от копирования, вы бы сделали то же самое, но использовать систему.Сеть.Сборник.IgnoreFileBuildProvider как тип.

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

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

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

в приведенном выше примере:

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

подробнее:веб-развертывание: исключение файлов и папок через файл проекта веб-приложения

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

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

  • самый высокий" повышенный " ответ ссылается на статью из 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, найденный в ~ / Properties / PublishProfiles для проектов веб-приложений и ~ / App_Data / PublishProfiles для веб-сайтов, просто добавьте:

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

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

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

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

enter image description here

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

MsDeploy пропустить правила для спасения:

во-первых, 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>

и, пожалуйста, не забывайте, чтобы избежать . в правиле пропуска пути к файлу с обратной косой чертой.

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

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

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

надеюсь, что это помогает.

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

1) Построить Действие: Нет

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

сначала я попытался установить свойство копировать в выходной каталог сам по себе, но это не сработало, когда действие сборки было установлено на значение по умолчанию, Content. Когда я затем установил действие сборки в None, текстовый файл больше не копировался в папку назначения при публикации.

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

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

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

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

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

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

Для Visual Studio 2017,Сервис Публикации, сначала создайте стандартный профиль публикации файловой системы. Перейдите в папку 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 имеет значение ложные