Функциональность преобразования web.config, которая была добавлена к проектам веб-сайтов в Visual Studio 2010, по умолчанию отключена для сборок командной строки и TFS.
Есть два относительно простых решения:
Вариант 1. Измените определение сборки и добавьте следующее в поле «Аргументы MSBuild»:
/p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false
UseWPP_CopyWebApplication вызовет активацию нового конвейера веб-публикации (WPP) для сборки. WPP выполняет преобразования web.config, а также может использоваться для блокировки таких вещей, как файлы .PDB, от копирования в папку bin.
Вариант 2: и MSBuild, и WPP полностью расширяемы. Создайте новый XML-файл в том же каталоге, что и ваш проект, и используйте расширение «.targets», например ProjectName.custom.targets. Поместите следующий код MSBuild в целевой файл:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseWPP_CopyWebApplication>True</UseWPP_CopyWebApplication>
<PipelineDependsOnBuild>False</PipelineDependsOnBuild>
</PropertyGroup>
</Project>
Щелкните правой кнопкой мыши на своем веб-сайте и выберите «Выгрузить проект». Щелкните правой кнопкой мыши выгруженный проект и выберите «Редактировать». Прокрутите файл проекта до конца и найдите эти строки:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
В этих строках подключается процесс сборки C # и веб-проекта. Вставьте импорт в собственные расширения сборки (целевой файл) непосредственно перед импортом CSharp:
<Import Project="ProjectName.custom.targets"/>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Вот и все - вам хорошо. Настроить метод настройки MSBuild немного сложнее, но его преимущество состоит в том, что вы можете использовать новый целевой файл, чтобы «подключиться» к процессу сборки и иметь гораздо больший контроль над тем, как ваша сборка происходит на сервере. Например, вы можете подключать задачи для сжатия CSS и JS.
Я также рекомендую посмотреть на «цели wpp» - если вы назовете другой файл MSBuild с конкретным именем «ProjectName.wpp.targets», вы сможете контролировать весь процесс публикации веб-сайта. Мы используем его для удаления файлов документации javascript -vsdoc при копировании опубликованного веб-сайта:
<ItemGroup>
<ExcludeFromPackageFiles Include="Scripts\**\*-vsdoc.js;Resources\Scripts\**\-vsdoc.js">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Все сказано, вам, вероятно, лучше полностью исключить рабочий файл web.configs из своей сборки. Мы размещаем преобразования непосредственно на нашей производственной машине развертывания и используем PowerShell для преобразования при развертывании приложения.
person
ShadowChaser
schedule
02.06.2011