44

我试图让我的 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 都被复制。

任何想法表示赞赏。

4

1 回答 1

75

为此,我一直把头撞在墙上。在穿越 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 ) 设置为true来使用它。默认情况下,它现在更改为在 Microsoft.Web.Publish.targets 中使用 _WPPCopyWebApplication 目标。它允许利用 web.config trsnaformation。[所有原文]

哦哦。UseWPP_CopyWebApplication默认为 false(第 27 行),如果您不想破坏现有的_CopyWebApplication. 因此,将其设置为 true 实际上将使用引入到 VS 2010 的新 WPP 内容。我更喜欢这个而不是调用“隐藏”目标。

于 2010-06-01T21:11:37.947 回答