MSBuild - 我在部署时如何强制“AfterBuild”目标?

时间:2013-04-10 18:13:55

标签: msbuild web-config web-config-transform

我有以下设置:ASP.Net MVC .Net 4.0解决方案,其中包含5个项目,以及多个解决方案配置( Site1-Stage,Site1-Live,Site2-Stage 等)。原因很简单 - 我们将相同的代码库部署到具有不同配置设置的多个服务器。

为了管理这些配置,我使用了Troy Hunt在他的You're deploying it wrong! TeamCity, Subversion & Web Deploy part 1: Config transforms文章中描述的方法。用两个词 - 我的SVN仓库中没有 web.config ,而是 Web.Base.Config Web.Site1-Stage.Config <项目 AfterBuild 目标中的/ em>,等和 XmlTransformation 任务。在构建期间,将根据所选配置生成所需的 web.config

 <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="AfterBuild">
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" StackTrace="true" />
  </Target>

出现问题:当我执行这样的MSBuild时:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild

一切顺利,为 Site1-Stage 配置正确生成了web.config。但是,如果我运行此命令:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True

我收到以下错误:

  

&#34; MySolution.sln&#34; (重建目标)(1) - &gt; &#34; MySolution \ MyWebProj.csproj&#34;   (重建目标)(3) - &gt; (PreTransformWebConfig目标) - &gt; C:\ PROGRAM   档   (86)\的MSBuild \微软\ VisualStudio的\ V10.5 \网络\ Microsoft.Web.Publishing.targets(1399,5):   错误:将文件Web.config复制到   obj \ Site1-Stage \ TransformWebConfig \ original \ Web.config失败。可以   找不到文件&#39; Web.config&#39;。 [MySolution \ MyWebProj.csproj]

我试图明确添加&#34; AfterBuild&#34;目标进入MSBuild命令行:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True

但它导致了同样的错误。

为什么我需要这个:这是一个非常孤立的例子,实际上我正试图从TeamCity CI服务器设置自动发布。我想如果我用&#34; Visual Studio(sln)&#34;添加新的构建步骤跑步者在我当前的发布步骤之前,这将起作用,它将首先重建项目(并生成web.config) - 然后发布。但是,我有很多发布步骤(现在大约20个),我想避免这种情况。我的理解是&#34;发布&#34;进程将构建作为其中的一部分,因此我希望&#34;重用&#34;这一点。

问题是:我应该如何修改MSBuild命令行以强制进行配置转换?

谢谢。

1 个答案:

答案 0 :(得分:4)

也许使用“BeforeBuild”?

BTW你有csproj中包含的web.config吗?我相信大多数发布活动都依赖于项目而不是文件夹中的项目。您可以在项目中包含web.config,同时仍将其从源代码管理中排除。