2009-12-31 57 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