avs*_*099 6 msbuild web-config web-config-transform
我有以下设置:ASP.Net MVC .Net 4.0解决方案,其中包含5个项目,以及多个解决方案配置(Site1-Stage,Site1-Live,Site2-Stage等).原因很简单 - 我们将相同的代码库部署到具有不同配置设置的多个服务器.
为了管理这些配置,我使用Troy Hunt所描述的方法,你的部署错了!TeamCity,Subversion和Web Deploy第1部分:Config转换文章.用两个词 - 我的SVN 仓库中没有web.config,而是在项目AfterBuild目标中有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>
Run Code Online (Sandbox Code Playgroud)
问题出在这里:当我执行MSBuild时:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild
Run Code Online (Sandbox Code Playgroud)
一切顺利,为Site1-Stage配置正确生成了web.config .但是,如果我运行此命令:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
"MySolution.sln"(重建目标)(1) - >"MySolution\MyWebProj.csproj"(重建目标)(3) - >(PreTransformWebConfig target) - > C:\ Program Files(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]
我试图在MSBuild命令行中显式添加"AfterBuild"目标:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True
Run Code Online (Sandbox Code Playgroud)
但它导致了同样的错误.
为什么我需要这个:这是一个非常孤立的例子,实际上我正在尝试从TeamCity CI服务器设置自动发布.我想如果我在当前的发布步骤之前添加"Visual Studio(sln)"运行器的新构建步骤,那将会起作用,它将首先重建项目(并生成web.config) - 然后发布.但是,我有很多发布步骤(现在大约20个),我想避免这种情况.我的理解是"发布"过程将构建作为其中的一部分,因此我想"重用"它.
问题是:如何修改MSBuild命令行以强制配置转换发生?
谢谢.
也许使用“BeforeBuild”?
顺便说一句,csproj 中包含 web.config 吗?我相信大多数发布活动依赖于项目中的项目而不是文件夹中的项目。您可以将 web.config 包含在项目中,同时仍将其从源代码管理中排除。
| 归档时间: |
|
| 查看次数: |
3933 次 |
| 最近记录: |