2009-12-31 91 views
41

我試圖讓我的web應用程序自動發佈時執行發佈構建。我正在使用_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中使用「發佈」菜單項時生成的輸出之間的區別在於,使用MSBuild方法時,Web.Release.config轉換不會應用於Web.config文件。相反,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。這是錯誤的。查找管線70 _CopyWebApplication的評論是:

原來_CopyWebApplication現在是一個傳統,你仍然可以使用它通過設置$(UseWPP_CopyWebApplication)到真正。 默認情況下,它現在更改爲在Microsoft.Web.Publish.targets中使用_WPPCopyWebApplication目標。它允許利用web.config信息。 [all sic]

呃哦。 UseWPP_CopyWebApplication默認爲假(第27行),如果您不想打破現有_CopyWebApplication,這是有意義的。因此將其設置爲true實際上會使用VS 2010中引入的新WPP內容。我更喜歡通過調用「隱藏」目標。

+4

WTF Microsoft?感謝分享這個Jabe ... – jjxtra 2012-01-23 22:01:08

+0

我不知道我有一種方法可以修復複製通過其他項目引用的庫,以包含在msbuild輸出目錄中? – 2013-11-25 11:48:22

+0

我試圖用WebDeploy use/p:WebPublishMethod = FileSystem並使用pubxml文件來做到這一點。我無法讓它工作。這個解決方案是我找到的最好的方法。建議一句話:如果沒有OutDir屬性設置,我無法使其工作。即使已經在項目屬性中定義了它,也需要將其包含在命令行中。 – 2014-12-04 16:26:40