TFS / MSBuild构建/发布Web部署不会转换web.config文件

时间:2013-07-17 10:33:36

标签: visual-studio-2012 tfs msbuild tfsbuild webdeploy

我正在尝试通过TFS在Visual Studio 2012解决方案中部署两个网站项目,作为构建的一部分。我们正处于两个不同的Web服务器WIP(正在进行中)和DEV

我们希望将不同的连接字符串部署到任一服务器,以便它们可以连接到不同的数据库。我们已经使用Visual Studio在开发计算机上测试了我们的解决方案,并且对于所有配置,当发布任何Web项目时,{I}连接字符串在检查Web服务器时按预期进行转换。

构建在使用默认调试解决方案配置的web.config服务器上正常运行。 TFS Build中的配置是Any CPU | Debug。

对于下一个配置(WIP),我们确信Web项目都通过Visual Studio 2012发布到Web服务器并且DEV文件转换。

但是,当我们使用MSBuild参数运行web.config构建时,我们注意到没有发生转换。我们已将构建的Items to Build部分中的配置发送到:Any CPU | Dev。

DEV

当我们查看构建日志和输出目录时 - 我们可以看到/p:VisualStudioVersion=10.0 /p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml /p:DeployTarget=MsDeployPublish /p:MsDeployServiceUrl=https://server-dev-hrtech:8172/MSDeploy.axd /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=WMSVC /p:AllowUntrustedCertificate=True /p:Username=username /p:Password=password /p:_WPPCopyWebApplication=True /p:PipelineDependsOnBuild=False 目录中的已编译程序集,而不是我们预期的obj/Debug目录。在日志中,我们可以清楚地看到obj/Dev正如我们所期望的那样。

底线是在Web服务器上结束的已发布/p:Configuration="Dev"是Debug配置中的默认web.config文件(即未转换)。就好像MSBuild无法在解决方案的参数中看到传递的配置参数。

我现在尝试从我的开发机器上的命令行运行msbuild,试着理解为什么会这样。

通过剥离通过TFS构建发送的MSBuild参数,我可以看到这不会转换Web配置:

web.config

我可以修改它并使用MSBuild直接构建项目文件。我发现下面的命令确实转换了已发布应用程序的msbuild "app-no database.sln" /t:app_ui:Rebuild /P:TransformConfigFiles=true /p:Configuration=Dev /p:Platform="Any CPU" /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 > build.log 文件:

web.config

问题是这很难作为TFS构建的一部分运行,它们是多个项目,一些用于网站,另一些用于Windows服务器等。

如何使用第一个命令,但修改它以便正确转换Web项目?

正如您所看到的,我已经创建了一些发布配置文件,因此它们可能也可以在TFS Build中的MSBuild参数中使用。

PS:我们使用Visual Studio 2012,TFS 2010,Windows 2008R2用于服务器,Windows 7用于开发机器。

4 个答案:

答案 0 :(得分:1)

我遇到过这个问题,关于如何通过Publish Profile文件发布网站,article是我见过的最好的。{/ p>

对于您的情况,您似乎需要使配置文件名称与配置名称相同,例如使用Dev.pubxml和Web.Dev.config。

答案 1 :(得分:0)

默认情况下,TFS 2010 Build似乎不会调用转换 MSBuild任务。您需要编辑TFS构建定义以添加调用它的新活动或编辑项目文件来执行此操作。

Stack Overflow问题 TFS Build not transforming web.config as expected 可以帮助您添加新的活动和博客帖子 Integrating Web Config Transformations with TFS Build ,以便对项目文件进行更改。< / p>

答案 2 :(得分:0)

/p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml

我不认为.pubxml应该在个人资料的末尾。 应该是这样的

/p:DeployOnBuild=True;PublishProfile=app.ui.dev

答案 3 :(得分:0)

我刚遇到这个问题。检查MSBuild日志,检查制作本地ZIP包,检查Web Deploy推送到远程IIS,它始终使用默认配置文件!

原来我查看检查QA设置的XML块是否缺少xdt:Transform="Replace"属性!

希望这有助于某人。