【发布时间】:2013-07-15 20:49:17
【问题描述】:
我正在尝试通过 TFS 在 Visual Studio 2012 解决方案中部署一个包含两个网站的项目,作为构建的一部分。我们现在有两个不同的网络服务器,WIP(正在进行中)和DEV。
我们希望将不同的连接字符串部署到任一服务器,以便它们可以连接到不同的数据库。我们已经在使用 Visual Studio 的开发机器上测试了我们的解决方案,并且对于所有配置,当发布任何 Web 项目时,当我们检查 Web 服务器时,web.config 连接字符串会按预期进行转换。
构建在使用默认调试解决方案配置的WIP 服务器上运行良好。 TFS Build 中的配置是 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 是来自调试配置(即未转换)的默认 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 用于开发机器。
【问题讨论】:
标签: visual-studio-2012 tfs msbuild tfsbuild webdeploy