实施持续部署时,app / web.config中的特定于环境的配置

时间:2017-04-13 05:12:36

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

TL; DR;

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

完整问题

我正在尝试使用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中创建一个基于“Release”的新配置,我将其命名为“Deployment”。然后我只在这个配置上使用XML Transform来标记配置文件并按原样保留Debug和Release。在我的TFS构建中,我将使用此配置将部署标记化配置文件作为工件,我最终可以使用Powershell脚本和环境变量(如上面的第一个链接)进行更新。但它似乎太复杂,涉及太多事情。我确信有一些更简单的事情可以做。

还有this solution,但这意味着1个环境= 1个版本。我绝对想避免这种情况。我想在任何地方进行1 build = deploy。

1 个答案:

答案 0 :(得分:1)

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

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

  1. 您的web.config文件可能是这样的:
  2. 代码:

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

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

        <?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