【问题标题】:Environment-specific configuration in app/web.config when implementing continuous deployment实施持续部署时在 app/web.config 中的环境特定配置
【发布时间】:2017-04-13 05:12:36
【问题描述】:

TL;DR;

在实施持续部署时,如何使用 Visual Studio & TFS 2015 管理 app.config/web.config 中的环境特定设置?

完整问题

我正在尝试使用 the built-in feature in TFS 2015 为我的 C# Visual Studio 2015 解决方案实施持续部署。我目前想知道如何在我的配置文件中设置与环境相关的设置(通常是数据库连接字符串)。

我基本上有 4 种不同的环境:生产、预生产、UAT 和集成。我没有部署到 Azure 或云。一切都在我公司的服务器上。

我已尝试实施 this link 提出的解决方案,但除非我误解了某些内容,否则我觉得这意味着我还必须在我的 Visual Studio 解决方案中标记我的 web.config 和 app.config。我想避免这种情况,因为我想尽可能保持我和我队友的体验。我不希望我们不得不修改另一个文件来管理我们的配置设置。

我也想过使用 XML 转换,这将在部署期间由 Powershell 任务触发。基本上,我保留我的配置文件,并且该任务在触发时修改配置文件(如this link 所建议的那样)。但理想情况下,我想使用该版本的内置环境变量。此外,这意味着我的转换文件将作为我的解决方案的一部分签入。如果我需要更改它,我需要运行一个新的构建/部署。我想避免这种情况。

所以没有解决方案是完全令人满意的。我想知道是否有其他工具或库可以完成这项工作。我什么也找不到。如果什么都没有,我想我可以通过 Powershell 任务想出一些东西,但如果我可以避免重新发明轮子......

最后一件事,我想我可以在 Visual Studio 中创建一个基于“发布”的新配置,我会命名为“部署”。然后我会在此配置上使用 XML 转换,仅对配置文件进行标记,并保持 Debug 和 Release 不变。在我的 TFS 构建中,我将使用此配置来部署标记化配置文件作为工件,我最终可以使用 Powershell 脚本和环境变量(如上面的第一个链接)进行更新。但这似乎太复杂,涉及的东西太多。我敢肯定还有更简单的事情可以做。

还有this solution,但这意味着 1 个环境 = 1 个构建。我绝对想避免这种情况。我想要 1 次构建 = 到处部署。

【问题讨论】:

    标签: powershell xslt visual-studio-2015 tfs-2015 continuous-deployment


    【解决方案1】:

    如果您希望在部署时在不同的发布环境中更改 app.config/web.config 中的数据库连接字符串等设置,您可以下载此Release Management Utility tasks extension 并将其安装到您的 TFS 集合中。使用 Tokenize with XPath/Regular 步骤更改相应的值。

    在这一步中,它提供了许多方法来替换文件中的值。对于大多数方法,您需要更改连接字符串,例如:_ConnectingValue_。如果你不想添加这个符号(_),你可以使用下面的方法:

    1. 您的 web.config 文件可能如下所示:

    代码:

      <?xml version="1.0" encoding="utf-8"?>
        <configuration>
          <appSettings>
            <add key="TestKey1" value="Old Value" />
          </appSettings>
        </configuration>
    
    1. 创建.json 文件:

    代码:

    {
          "Default Environment":{
              
              "ConfigChanges":[
                 {
                    "KeyName":"/configuration/appSettings/add[@key='TestKey1']",
                    "Attribute":"value",
                    "Value":"New value"
                 }
              ]
           }
        }
    
    1. 那么您的旧值将更改为新值。

    结果:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <appSettings>
        <add key="TestKey1" value="New value" />
      </appSettings>
    </configuration>
    

    要了解有关此步骤的更多信息:

    1. Using Tokenization for Builds/Releases in vNext/TFS 2015

    2. VS 2015 Release Management Tokenize XPath/Regular expressions not working

    【讨论】:

    • 待定。我需要我的 TFS 管理员有时间下载/安装/测试这个东西......但我试图在 Powershell 中实现相同的功能。我还没有完全完成,但到目前为止看起来很有希望
    • @Guillaume 您想替换 powershell 脚本文件中的某些值吗?
    • 不,我想用 PowerShell 替换配置文件 中的值。你的答案不是我想要的,但我认为它足够接近所以我接受了。我认为我无法以非常简单的方式实现我最初想要的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2018-11-24
    • 2021-05-23
    • 2019-11-04
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多