【问题标题】:TFS/MSBuild build/publish web deploy does not transform the web.config filesTFS/MSBuild 构建/发布 web 部署不会转换 web.config 文件
【发布时间】: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


    【解决方案1】:

    我遇到过这个问题,关于如何通过发布配置文件发布网站,这个article是我见过的最好的。

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

    【讨论】:

    • 很奇怪。好吧,这解决了我的问题!我有一个名为“Deploy”的配置文件,我的配置名称是“Release”。
    【解决方案2】:
    /p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml
    

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

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

    【讨论】:

      【解决方案3】:

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

      堆栈溢出问题 TFS Build not transforming web.config as expected 应该可以帮助您添加新活动和博客文章 Integrating Web Config Transformations with TFS Build 以更改项目文件。

      【讨论】:

        【解决方案4】:

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

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

        希望这对某人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 2013-06-29
          • 2023-04-02
          • 2013-01-03
          • 2022-02-19
          相关资源
          最近更新 更多