我正在尝试在执行发布版本时自动发布我的Web应用程序。我正在使用_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中使用“发布”菜单项时生成的输出之间的差异在于,在使用MSBuild方法时,Web.Release.config转换不会应用于Web.config文件。而是复制了Web.config,Web.Release.config和Web.Debug.config。
任何想法都表示赞赏。
答案 0 :(得分:73)
长话短说:尝试使用新的_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现在是Legacy,您仍然可以通过将$( UseWPP_CopyWebApplication )设置为 true 来使用它。 默认情况下,它现在更改为在Microsoft.Web.Publish.targets中使用_WPPCopyWebApplication目标。它允许利用web.config trsnaformation。 [所有原文]
UseWPP_CopyWebApplication
默认为false(第27行),如果您不想破坏现有_CopyWebApplication
,则有意义。因此将其设置为true实际上将使用引入VS 2010的新WPP内容。我更喜欢调用“隐藏”目标。