MSBuild-如何强制;“后建”;当我进行部署时确定目标?

MSBuild-如何强制;“后建”;当我进行部署时确定目标?,msbuild,web-config,web-config-transform,Msbuild,Web Config,Web Config Transform,我有以下设置:包含5个项目的ASP.Net MVC.Net 4.0解决方案,以及多个解决方案配置(Site1阶段、Site1 Live、Site2阶段等)。原因很简单-我们使用不同的配置设置将相同的代码库部署到多个服务器 为了管理这些配置,我使用Troy Hunt在其文章中描述的方法。总之,我的SVN repo中没有web.config,而是在project AfterBuild target中有web.Base.config、web.Site1-Stage.config等和XmlTransfo

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

为了管理这些配置,我使用Troy Hunt在其文章中描述的方法。总之,我的SVN repo中没有web.config,而是在project AfterBuild target中有web.Base.config、web.Site1-Stage.config等和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>
一切顺利,为Site1阶段配置正确生成了web.config。但是,如果我运行此命令:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True
我得到以下错误:

“MySolution.sln”(重建目标)(1)->“MySolution\MyWebProj.csproj” (重建目标)(3)->(预传输MWebConfig目标)->C:\Program 文件夹 (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Microsoft.Web.Publishing.targets(1399,5): 错误:将文件Web.config复制到 obj\Site1 Stage\TransformWebConfig\original\Web.config失败。能够 找不到文件“Web.config”。[MySolution\MyWebProj.csproj]

我尝试将“AfterBuild”目标显式添加到MSBuild命令行:

msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True
但这也导致了同样的错误

我为什么需要这个:这是一个非常孤立的示例,实际上我正在尝试从TeamCity CI server设置自动发布。我认为,如果我在当前发布步骤之前添加带有“VisualStudio(sln)”runner的新构建步骤,那么它将首先重建项目(并生成web.config),然后发布。但是,我有很多发布步骤(现在大约20个),我希望避免这样做。我的理解是,“发布”过程作为构建的一部分进行构建,所以我想“重用”它

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

谢谢。

可能使用“构建前”吗


顺便问一下,csproj中是否包含web.config?我相信大多数发布活动都依赖于项目中的项目,而不是文件夹中的项目。您可以在项目中包括web.config,但仍然将其从源代码管理中排除。

后构建
目标没有任何输出。MSBuild似乎跳过了这个目标,认为它是最新的。将输出(
Web.Config
在您的情况下)添加到您的
AfterBuild
目标输出。可能使用“BeforeBuild”?顺便问一下,csproj中是否包含web.config?我相信大多数发布活动依赖于项目中的项目,而不是文件夹中的项目——尽管没有检查它。如果不是-您可以在项目中包含web.config,但仍然将其从源代码中排除control@Lanorkin-成功了!非常感谢-请将您的评论作为答案发布。这两个选项中的哪一个?@avs099,您需要将web.config包含到项目中还是源代码管理中?(即使它将被转换覆盖…@Mobigital我不包括它)
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True