Исключение файлов и папок из развертывания
В этом разделе описывается, как исключить файлы и папки из пакета веб-развертывания при сборке и упаковке проекта веб-приложения.
Этот раздел является частью серии учебников, основанных на требованиях к развертыванию на предприятии вымышленной компании Fabrikam, Inc. В этой серии учебников используется пример решения диспетчера контактов для представления веб-приложения с реалистичным уровнем сложности, включая приложение ASP.NET MVC 3, службу Windows Communication Foundation (WCF) и проект базы данных.
Метод развертывания в основе этих учебников основан на подходе с разделением файлов проекта, описанном в разделе Основные сведения о файле проекта, в котором процесс сборки управляется двумя файлами проекта: один содержит инструкции сборки, которые применяются к каждой целевой среде, а второй содержит параметры сборки и развертывания для конкретной среды. Во время сборки файл проекта для конкретной среды объединяется с файлом проекта, не зависящим от среды, чтобы сформировать полный набор инструкций по сборке.
Общие сведения
При создании проекта веб-приложения в Visual Studio 2010 конвейер веб-публикации (WPP) позволяет расширить этот процесс сборки, упаковав скомпилированное веб-приложение в развертываемый веб-пакет. Затем можно использовать средство веб-развертывания служб IIS (веб-развертывание), чтобы развернуть этот веб-пакет на удаленном веб-сервере IIS или импортировать веб-пакет вручную с помощью диспетчера IIS. Этот процесс упаковки описан в статье Создание и упаковка проектов веб-приложений.
Так как вы контролируете, что входит в веб-пакет? Параметры проекта в Visual Studio с помощью базового файла проекта обеспечивают достаточный контроль для многих сценариев. Однако в некоторых случаях может потребоваться адаптировать содержимое веб-пакета к конкретным целевым средам. Например, при развертывании приложения в тестовой среде может потребоваться добавить папку для файлов журналов, но исключить папку при развертывании приложения в промежуточной или рабочей среде. В этом разделе показано, как это сделать.
Что включается по умолчанию?
При настройке свойств проекта веб-приложения в Visual Studio список Элементы для развертывания на веб-странице Пакет или публикация позволяет указать, что вы хотите включить в пакет веб-развертывания. По умолчанию для этого параметра задано значение Только файлы, необходимые для запуска этого приложения.
При выборе параметра Только файлы, необходимые для запуска этого приложения, WPP попытается определить, какие файлы следует добавить в веб-пакет. В том числе:
- Все выходные данные сборки для проекта.
- Все файлы, помеченные действием сборки Содержимое.
Примечание
Логика, определяющая, какие файлы следует включить, содержится в этом файле:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets
Исключение определенных файлов и папок
В некоторых случаях требуется более точное управление тем, какие файлы и папки развертываются. Если вы заранее знаете, какие файлы нужно исключить, и исключение применяется ко всем целевым средам, можно просто установить для параметра Действие сборки каждого файла значение Нет.
Исключение определенных файлов из развертывания
- В окне Обозреватель решений щелкните файл правой кнопкой мыши и выберите пункт Свойства.
- В окне Свойства в строке Действие сборки выберите Нет.
Однако такой подход не всегда удобен. Например, может потребоваться изменить, какие файлы и папки будут включены в соответствии с целевой средой и из-за пределов Visual Studio. Например, в примере решения Диспетчера контактов просмотрите содержимое проекта ContactManager.Mvc:
- Папка Internal содержит некоторые скрипты SQL, которые разработчик использует для создания, удаления и заполнения локальных баз данных в целях разработки. Ничего из этой папки не должно быть развернуто в промежуточной или рабочей среде.
- Папка Scripts содержит несколько файлов JavaScript. Многие из этих файлов включены исключительно для поддержки отладки или предоставления IntelliSense в Visual Studio. Некоторые из этих файлов не следует развертывать в промежуточной или рабочей среде. Однако вы можете развернуть их в тестовой среде разработчика, чтобы упростить устранение неполадок.
Хотя вы можете управлять файлами проекта, чтобы исключить определенные файлы и папки, существует более простой способ. WPP включает механизм исключения файлов и папок путем создания списков элементов с именами ExcludeFromPackageFolders и ExcludeFromPackageFiles. Этот механизм можно расширить, добавив собственные элементы в эти списки. Для этого необходимо выполнить следующие общие действия:
Создайте пользовательский файл проекта с именем [имя проекта].wpp.targets в той же папке, что и файл проекта.
Примечание
Файл WPP.targets должен идти в той же папке, что и файл проекта веб-приложения, например ContactManager.Mvc.csproj, а не в той же папке, что и любые пользовательские файлы проекта, используемые для управления процессом сборки и развертывания.
В файле WPP.targets добавьте элемент ItemGroup .
В элементе 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 в проект веб-приложения и как использовать этот файл для исключения определенных файлов и папок из веб-пакета при сборке проекта.
Исключение файлов и папок из пакета веб-развертывания
Откройте решение в Visual Studio 2010.
В окне Обозреватель решений щелкните правой кнопкой мыши узел проекта веб-приложения (например, ContactManager.Mvc), наведите указатель на пункт Добавить, а затем выберите пункт Создать элемент.
В диалоговом окне Добавление нового элемента выберите шаблон XML-файл .
В поле Имя введите [имя проекта].wpp.targets (например, ContactManager.Mvc.wpp.targets) и нажмите кнопку Добавить.
Примечание
При добавлении нового элемента в корневой узел проекта файл создается в той же папке, что и файл проекта. Это можно проверить, открыв папку в Windows Обозреватель.
Добавьте в файл элементы Project и ItemGroup :
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> </ItemGroup> </Project>
Если вы хотите исключить папки из веб-пакета, добавьте элемент ExcludeFromPackageFolders в элемент ItemGroup :
В атрибуте Include укажите разделенный точкой с запятой список папок, которые нужно исключить.
В элементе метаданных FromTarget укажите понятное значение, указывающее, почему папки исключаются, например имя файла WPP.targets .
<ExcludeFromPackageFolders Include="Internal"> <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget> </ExcludeFromPackageFolders>
Если вы хотите исключить файлы из веб-пакета, добавьте элемент ExcludeFromPackageFiles в элемент ItemGroup :
В атрибуте Include укажите разделенный точкой с запятой список файлов, которые нужно исключить.
В элементе метаданных 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>
Файл [имя проекта].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>
Сохраните и закройте файл [имя проекта].wpp.targets .
При следующей сборке и упаковке проекта веб-приложения WPP автоматически обнаружит файл WPP.targets . Все указанные файлы и папки не будут включены в веб-пакет.
Заключение
В этом разделе описано, как исключить определенные файлы и папки при создании веб-пакета, создав пользовательский wpp.targets-файл в той же папке, что и файл проекта веб-приложения.
Дополнительные материалы
Дополнительные сведения об использовании пользовательских файлов проекта Microsoft Build Engine (MSBuild) для управления процессом развертывания см. в разделах Общие сведения о файле проекта и Общие сведения о процессе сборки. Дополнительные сведения о процессе упаковки и развертывания см. в разделах Создание и упаковка проектов веб-приложений, Настройка параметров развертывания веб-пакетов и Развертывание веб-пакетов.