我有以下设置: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命令行以强制进行配置转换?
谢谢。
答案 0 :(得分:4)
也许使用“BeforeBuild”?
BTW你有csproj中包含的web.config吗?我相信大多数发布活动都依赖于项目而不是文件夹中的项目。您可以在项目中包含web.config,同时仍将其从源代码管理中排除。