Исключение файлов и папок из развертывания

Джейсон Ли

В этом разделе описывается, как можно исключить файлы и папки из пакета веб-развертывания при сборке и пакете проекта веб-приложения.

Этот раздел является частью серии учебников, основанных на требованиях к развертыванию предприятия вымышленной компании Fabrikam, Inc. В этой серии учебников используется пример решения — решение Contact Manager— для представления веб-приложения с реалистичным уровнем сложности, включая приложение MVC 3 ASP.NET MVC 3, службу Windows Communication Foundation (WCF) и проект базы данных.

Метод развертывания в центре этих учебников основан на подходе к разделенному файлу проекта, описанному в разделе "Общие сведения о файле проекта", в котором процесс сборки управляется двумя файлами проекта — одним из них содержит инструкции по сборке, которые применяются к каждой целевой среде, а также один из них содержит параметры сборки и развертывания для конкретной среды. Во время сборки файл проекта для конкретной среды объединяется в файл проекта, не зависящем от среды, чтобы сформировать полный набор инструкций по сборке.

Обзор

При создании проекта веб-приложения в Visual Studio 2010 конвейер веб-публикации (WPP) позволяет расширить этот процесс сборки, упаковав скомпилированное веб-приложение в развертываемый веб-пакет. Затем вы можете использовать средство веб-развертывания служб IIS (веб-развертывание) для развертывания этого веб-пакета на удаленном веб-сервере IIS или импортировать веб-пакет вручную с помощью диспетчера IIS. Этот процесс упаковки описан в разделе "Создание и упаковка проектов веб-приложений".

Так как вы управляете тем, что включается в веб-пакет? Параметры проекта в Visual Studio с помощью базового файла проекта обеспечивают достаточный контроль для множества сценариев. Однако в некоторых случаях может потребоваться настроить содержимое веб-пакета в конкретных целевых средах. Например, может потребоваться включить папку для файлов журналов при развертывании приложения в тестовой среде, но исключить папку при развертывании приложения в промежуточной или рабочей среде. В этом разделе показано, как это сделать.

Что включается по умолчанию?

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

По умолчанию это значение имеет значение

При выборе только файлов, необходимых для запуска этого приложения, WPP попытается определить, какие файлы следует добавить в веб-пакет. Сюда входит следующее:

  • Все выходные данные сборки для проекта.
  • Все файлы, помеченные действием сборки тип Content.

Замечание

Логика, определяющая, какие файлы следует включить в этот файл:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

Исключение определенных файлов и папок

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

Исключение определенных файлов из развертывания

  1. В окне обозревателя решений щелкните правой кнопкой мыши файл и выберите пункт "Свойства".
  2. В окне "Свойства" в строке "Действие сборки " выберите "Нет".

Однако этот подход не всегда удобно. Например, вы можете изменить, какие файлы и папки включены в соответствии с вашей целевой средой, как из Visual Studio, так и вне её. Например, в примере решения Диспетчера контактов просмотрите содержимое проекта ContactManager.Mvc:

Содержимое проекта ContactManager.Mvc.

  • Внутренняя папка содержит некоторые скрипты SQL, которые разработчик использует для создания, удаления и заполнения локальных баз данных для целей разработки. Ничего в этой папке не должно быть развернуто в промежуточной или рабочей среде.
  • Папка "Скрипты" содержит несколько файлов JavaScript. Многие из этих файлов включены исключительно для поддержки отладки или предоставления IntelliSense в Visual Studio. Некоторые из этих файлов не следует развертывать в промежуточных или рабочих средах. Однако их можно развернуть в тестовой среде разработчика, чтобы упростить устранение неполадок.

Хотя вы можете манипулировать файлами проекта, чтобы исключить определенные файлы и папки, существует более простой способ. WPP включает механизм исключения файлов и папок путем создания списков элементов с именем ExcludeFromPackageFolders и ExcludeFromPackageFiles. Этот механизм можно расширить, добавив собственные элементы в эти списки. Для этого необходимо выполнить следующие высокоуровневые действия:

  1. Создайте пользовательский файл проекта с именем [имя проекта].wpp.targets в той же папке, что и файл проекта.

    Замечание

    Файл .wpp.targets должен перейти в ту же папку, что и файл проекта веб-приложения( например , ContactManager.Mvc.csproj), а не в той же папке, что и все пользовательские файлы проекта, используемые для управления процессом сборки и развертывания.

  2. В файле .wpp.targets добавьте элемент ItemGroup .

  3. В элементе ItemGroup добавьте элементы ExcludeFromPackageFolders и ExcludeFromPackageFiles , чтобы исключить определенные файлы и папки по мере необходимости.

Это базовая структура этого файла .wpp.targets :

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

Обратите внимание, что каждый элемент содержит элемент метаданных элемента с именем FromTarget. Это необязательное значение, которое не влияет на процесс сборки; Он просто служит для указания того, почему определенные файлы или папки были опущены, если кто-то проверяет журналы сборки.

Исключение файлов и папок из веб-пакета

В следующей процедуре показано, как добавить файл WPP.targets в проект веб-приложения и как использовать этот файл для исключения определенных файлов и папок из веб-пакета при сборке проекта.

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

  1. Откройте решение в Visual Studio 2010.

  2. В окне обозревателя решений щелкните правой кнопкой мыши узел проекта веб-приложения (например, ContactManager.Mvc), наведите указатель на "Добавить" и выберите пункт "Создать элемент".

  3. В диалоговом окне "Добавление нового элемента" выберите шаблон XML-файла .

  4. В поле "Имя" введите [имя проекта].wpp.targets (например, ContactManager.Mvc.wpp.targets), а затем нажмите кнопку "Добавить".

    В поле

    Замечание

    При добавлении нового элемента в корневой узел проекта файл создается в той же папке, что и файл проекта. Это можно проверить, открыв папку в проводнике Windows.

  5. В файле добавьте элемент Project и элемент ItemGroup :

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>    
      </ItemGroup>
    </Project>
    
  6. Если вы хотите исключить папки из веб-пакета, добавьте элемент ExcludeFromPackageFolders в элемент ItemGroup :

    1. В атрибуте Include укажите список папок, которые вы хотите исключить, разделенных точкой с запятой.

    2. В элементе метаданных FromTarget укажите понятное значение, чтобы указать, почему папки исключаются, например имя файла WPP.targets .

      <ExcludeFromPackageFolders Include="Internal">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFolders>
      
  7. Если вы хотите исключить файлы из веб-пакета, добавьте элемент ExcludeFromPackageFiles в элемент ItemGroup :

    1. В атрибуте Include укажите список файлов, которые вы хотите исключить, разделив их точкой с запятой.

    2. В элементе метаданных FromTarget укажите понятное значение, чтобы указать, почему файлы исключаются, например имя файла WPP.targets .

      <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFiles>
      
  8. Теперь файл [имя проекта].wpp.targets должен выглядеть следующим образом:

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>   
        <ExcludeFromPackageFolders Include="Internal">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFolders>
        <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-
    vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFiles>
      </ItemGroup>
    </Project>
    
  9. Сохраните и закройте файл [имя проекта].wpp.targets .

При следующей сборке и упаковке проекта веб-приложения WPP автоматически обнаружит файл WPp.targets . Все указанные файлы и папки не будут включены в веб-пакет.

Conclusion

В этом разделе описано, как исключить определенные файлы и папки при создании веб-пакета, создав пользовательский файл WPP.targets в той же папке, что и файл проекта веб-приложения.

Дальнейшее чтение

Дополнительные сведения об использовании пользовательских файлов проекта Microsoft Build Engine (MSBuild) для управления процессом развертывания см. в разделе "Общие сведения о файле проекта " и "Общие сведения о процессе сборки". Дополнительные сведения о процессе упаковки и развертывания см. в статье "Создание и упаковка проектов веб-приложений", настройка параметров для развертывания веб-пакетов и развертывание веб-пакетов.