0

TL; DR;环境特定的配置实现时持续部署

如何在实施持续部署时使用Visual Studio在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中创建一个基于“发布”一个我会命名 - 说 - “部署”。然后,我会在此配置上使用XML Transform来标记配置文件,并按原样保留Debug和Release。在我的TFS构建中,我将使用此配置,以便将标记化的配置文件部署为工件,我最终可以使用Powershell脚本和环境变量(如上面第一个链接中的那样)更新这些工件。但它似乎太复杂,涉及太多东西。我确信有更简单的事情可以做到。

还有this solution,但它意味着1环境= 1构建。我绝对想避免这种情况。我想要1 build =无处不在。

回答

1

如果你想要像的app.config/web.config中的数据库连接字符串的一些设置,在不同版本的环境而改变部署时,你可以下载这个Release Management Utility tasks extension并安装它为您的TFS集合。使用Tokenize与XPath/Regular步骤来更改相应的值。

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

  1. 你的web.config文件可能是这样的:

代码:

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <appSettings> 
     <add key="TestKey1" value="Old Value" /> 
     </appSettings> 
    </configuration> 
  • 创建.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

    +0

    我会研究这个解决方案,让你知道它是怎么回事。 – Guillaume

    +0

    @Guillaume你有没有试过这个? –

    +0

    它正在等待。我需要我的TFS管理员有时间下载/安装/测试这个东西......但我试图在PowerShell中实现它。我还没有完成,但到目前为止,它看起来很有前途 – Guillaume