_CopyWebApplication с преобразованиями web.config

Я пытаюсь, чтобы мое веб-приложение автоматически публиковало, когда выполняется сборка Release. Я делаю это, используя цель _CopyWebApplication. Я добавил следующее в файл .csproj:

  <!-- Automatically Publish in Release build. -->
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
  <Target Name="AfterBuild">
    <RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" />
    <MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
  </Target>

Это работает, но с одной проблемой. Разница между этим выходом и результатом, сгенерированным при использовании пункта меню "Опубликовать" в Visual Studio, заключается в том, что преобразование Web.Release.config не применяется к файлу Web.config при использовании метода MSBuild. Вместо этого копируются файлы Web.config, Web.Release.config и Web.Debug.config.

Любые идеи приветствуются.

Ответ 1

Я воткнула головой о стену. После прогулки по объектам MSBuild я столкнулся с чем-то очень "непрозрачным".

Короче говоря: попробуйте использовать новый _WPPCopyWebApplication. Он работает на моей машине. Старый _CopyWebApplication не поддерживает преобразования по устаревшим причинам. Это то, что я делаю:

msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj

# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false

Длинная история:

Посмотрите VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets. Это так неправильно. Найдите _CopyWebApplication в строке 70. Комментарий:

Исходный _CopyWebApplication теперь является Legacy, вы все равно можете использовать его, установив $(UseWPP_CopyWebApplication) в true. По умолчанию он теперь используется для использования _WPPCopyWebApplication target в Microsoft.Web.Publish.targets. Это позволяет использовать trsnaformation web.config. [all sic]

О, о. UseWPP_CopyWebApplication по умолчанию используется значение false (строка 27), что имеет смысл, если вы не хотите разорвать существующий _CopyWebApplication. Таким образом, установка его в true будет использовать новый материал WPP, представленный на VS 2010. Я предпочитаю это для вызова "скрытой" цели.