我有以下设置: ASP.Net MVC .Net 4.0 解决方案,其中有 5 个项目,以及几个解决方案配置(站点 1 阶段、站点 1 实时、站点 2 阶段, ETC)。原因很简单 - 我们将相同的代码库部署到具有不同配置设置的多个服务器。
为了管理这些配置,我使用 Troy Hunt 在他的文章中描述的方法你部署错了! TeamCity、Subversion 和 Web 部署第 1 部分:配置转换 http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity.html文章。用两个字来说——我没有网络配置在我的 SVN 存储库中,我有网络基础配置, 网站.Site1-Stage.Config等以及Xml转换项目中的任务构建后目标。在构建过程中,需要网络配置根据所选配置生成:
<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
一切顺利,web.config 已正确生成站点1阶段配置。但是,如果我运行此命令:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True
我收到以下错误:
“MySolution.sln”(重建目标)(1) -> “MySolution\MyWebProj.csproj”
(重建目标) (3) -> (PreTransformWebConfig 目标) -> 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 服务器设置自动发布。我认为,如果我在当前的发布步骤之前使用“Visual Studio (sln)”运行程序添加新的构建步骤,那会起作用,它将首先重建项目(并生成 web.config) - 然后发布。然而,我有很多发布步骤(现在大约 20 个),我想避免这种情况。我的理解是“发布”过程将构建作为其一部分,所以我想“重用”它。
问题是:我应该如何修改 MSBuild 命令行以强制发生配置转换?
谢谢。