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

5
我正在尝试通过TFS将一个包含两个网站的项目部署到 Visual Studio 2012 解决方案中,并作为一项构建的一部分。我们已经处于有两个不同的 Web 服务器,WIP(进行中)和 DEV 的阶段。
我们希望向每个服务器部署不同的连接字符串,以便它们可以连接到不同的数据库。我们已在 Visual Studio 的开发机上测试了解决方案,在所有配置下,当任何 Web 项目发布时,检查 Web 服务器时,web.config 连接字符串都会按预期进行转换。
在使用默认的 Debug 解决方案配置的 WIP 服务器上,构建正常工作。TFS 构建中的配置是 Any CPU|Debug。
对于下一个配置(DEV),我们确信 Web 项目都通过 Visual Studio 2012 发布到 Web 服务器,并且 web.config 文件得到了转换。
然而,当我们使用MSBuild参数运行DEV构建时,我们注意到没有进行任何转换。我们已将配置发送到生成项部分的“Any CPU|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目录。在日志中,我们可以清楚地看到/p:Configuration="Dev",正如我们所期望的那样。
问题的关键在于发布到Web服务器上的web.config是来自Debug配置的默认web.config文件(即未转换的)。就好像MSBuild无法看到传递给解决方案参数的配置参数一样。
现在我尝试从开发机器上的命令行运行msbuild,以便了解为什么会发生这种情况。
通过剥离通过TFS构建发送的MSBuild参数,我可以看到这不会转换Web配置:
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

我可以修改这个项目文件并使用MSBuild直接构建。我发现下面的命令确实会为发布的应用程序转换web.config文件:
msbuild app.ui\app.ui.csproj /p:Configuration=Dev  /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 /p:AllowUntrustedCertificate=True > build.log

这个问题在TFS构建中运行会很困难,因为有多个项目,其中一些是网站,其他是Windows服务器等。
我该如何使用第一个命令,但修改它,使其正确转换Web项目?
正如您所看到的,我创建了一些发布配置文件,因此可能可以在MSBuild参数以及TFS构建中使用。
PS:我们正在使用Visual Studio 2012,TFS 2010,Windows 2008R2用于服务器和Windows 7用于开发机器。
4个回答

1
我遇到了一个问题,关于如何通过发布配置文件发布网站,这篇文章是我见过的最好的一篇。
对于你的情况,似乎你需要将配置文件名与配置名称相同,例如使用Dev.pubxml和Web.Dev.config。

奇怪。好的,这解决了我的问题!我有一个名为“Deploy”的配置文件,而我的配置名称是“Release”。 - Ryan Peters

0

0

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

结果发现,我查看QA设置的XML块缺少了xdt:Transform="Replace"属性!

希望这能帮助到某些人。


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

我认为 .pubxml 不应该出现在配置文件的末尾。 应该像这样

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接