我正在尝试通过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用于开发机器。
答案 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"
属性!
希望这有助于某人。