2009-12-31 4 views
41

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

<!-- 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 копируются.

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

ответ

71

Я приложил голову к стене для этого. После похода по объектам 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) к истинной. По умолчанию теперь он используется для использования _WPPCopyWebApplication target в Microsoft.Web.Publish.targets. Это позволяет использовать trsnaformation web.config. [все sic]

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

+4

WTF Microsoft? Спасибо, что поделились этим Jabe ... – jjxtra

+0

Интересно, есть ли способ исправить копирование библиотек, связанных с другим проектом, который будет включен в msbuild ouput dir? –

+0

Я попытался сделать это с использованием WebDeploy/p: WebPublishMethod = FileSystem и с использованием файлов pubxml. Я не мог заставить его работать. Это решение - лучший способ, который я нашел. Одно слово совета: я не мог заставить его работать без набора свойств OutDir. Вам нужно будет включить его в командную строку, даже если она уже определена в свойствах вашего проекта. –

Смежные вопросы