【问题标题】:How to transform Web.Config file 'Properly' with VSTS?如何使用 VSTS “正确”转换 Web.Config 文件?
【发布时间】:2018-07-08 11:59:59
【问题描述】:

我正在使用 VSTS 开发 DevOps。我有两个 Web 项目,例如 webproject1webproject2,每个项目都有 Web.config 文件。但是那些 Web.config 文件的 Web 项目由具有不同值的相同键组成。

示例: WebProjects1 包含具有这些键值的 Web.config 文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
    <connectionStrings>
     <add name="DBConnectionString" connectionString="Server=XXXX;Integrated Security=SSPI;Persist Security Info=True;Database=XXXX;Connect Timeout=60;MultipleActiveResultSets=True;Min Pool Size=10;Max Pool Size=200;Application Name=XXXX" providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

WebProjects2 包含具有这些键值的 Web.config 文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
    <connectionStrings>
     <add name="DBConnectionString" connectionString="Server=XXXX;Integrated Security=SSPI;Persist Security Info=True;Database=XXXX;Connect Timeout=60;MultipleActiveResultSets=True;Min Pool Size=10;Max Pool Size=200;Application Name=XXXX" providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

对于这些项目,我使用 IIS Web App Manage 和 IIS Web App Deploy Deployment 任务在 VSTS 中创建了发布定义。我想用两个 Web.config 文件中的客户端键值替换键值。但是这两个 Web.config 文件具有相同的键。因此,我无法使用 XML 变量替换 选项在 IIS web App Deploy VSTS release task using Variables 选项卡下将键替换为两个 Web.config 文件中的客户端值。

我按照link 使用 VSTS 来“正确”转换 Web.Config 文件,但本文档包含用单个 web.config 文件中的客户端值替换键。但它不包含关于多个 web.config 文件是否在多个项目中具有相同键的解释。

我知道使用多配置架构来解决上述问题,例如为 VS2015 中的每个 Web 项目创建 Web.Debug.config 和 Web.Release.config 文件。但我不想要这个过程。

在此先感谢....

【问题讨论】:

  • 由于您选择 Bitbucket 存储库作为 VSTS 版本的工件,这两个 Web 应用程序的包如何存储在您的 bitbucket 存储库中?包的两个单独的 .zip 文件?
  • @MarinaLiu-MSFT,drop 包含每个 Web 应用程序的单独文件夹,但不包含 .zip 文件。

标签: iis azure-devops azure-pipelines-release-pipeline web.config-transform


【解决方案1】:

默认情况下,MSBuild 将“帮助”参数化您的连接字符串。这些将显示在 SetParameters.xml 文件中构建工件的根目录中。当您尝试使用变量设置连接字符串时,此过程会发生冲突,就像您尝试做的那样。

我建议在你的构建中关闭自动参数化,看看你的连接字符串现在是否被你的变量值替换了。您应该能够命名一个变量“DBConnectionString”,将它绑定到一个环境,并且这个过程顺利进行。

【讨论】:

  • 感谢@raterus,现在我不必在 VSTS 中构建应用程序。但是构建过程发生在其他一些第三方工具中,比如 Bit Bucket。所以,现在我使用从位桶中删除,如果在发布定义中有任何更改,而不是在构建定义中。
  • @pradeep,我的回答与 VSTS 下的构建没有直接关系,任何构建服务器都可能遇到这个问题。我仍然会检查您的“丢弃”工件,以及任何可能干扰您在 VSTS 中尝试完成的操作的 SetParameters。此外,在您的发布变量中设置 System.debug=true,这将显示一些额外的日志记录,您可以在替换变量时跟踪日志。
猜你喜欢
  • 1970-01-01
  • 2018-04-11
  • 2018-06-19
  • 2017-12-01
  • 2012-06-16
  • 2012-05-02
  • 1970-01-01
  • 2011-10-07
  • 2014-05-31
相关资源
最近更新 更多