Powershell 实施连续部署时,在app/web.config中进行特定于环境的配置

Powershell 实施连续部署时,在app/web.config中进行特定于环境的配置,powershell,xslt,visual-studio-2015,tfs-2015,continuous-deployment,Powershell,Xslt,Visual Studio 2015,Tfs 2015,Continuous Deployment,TL;博士 在实施连续部署时,如何使用Visual Studio和TFS 2015管理app.config/web.config中特定于环境的设置 全部问题 我正在尝试使用为我的C Visual Studio 2015解决方案实现连续部署。我现在想知道如何在配置文件中设置与环境相关的设置,通常是DB连接字符串 我基本上有4种不同的环境:生产、预生产、UAT和集成。我没有部署到Azure或云。一切都在我公司的服务器上 我试图实现上提出的解决方案,但除非我误解了什么,否则我觉得这意味着我还必须在Vi

TL;博士

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

全部问题

我正在尝试使用为我的C Visual Studio 2015解决方案实现连续部署。我现在想知道如何在配置文件中设置与环境相关的设置,通常是DB连接字符串

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

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

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

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

最后一件事,我想我可以在VisualStudio中创建一个新的配置,该配置基于我将命名为部署的版本。然后,我将在这个配置上使用XML转换,只将配置文件标记化,并保持调试和发布原样。在我的TFS构建中,我将使用此配置,以便将标记化配置文件部署为工件,最终可以使用Powershell脚本和环境变量进行更新,如上面的第一个链接所示。但它似乎太复杂,涉及的事情太多。我相信还有更简单的事情可以做


也有,但它意味着1个环境=1个构建。我绝对想避免这种情况。我希望1 build=deploy everywhere。

如果您希望在部署时在不同的发布环境中更改某些设置,如app.config/web.config中的DB连接字符串,您可以下载此设置并将其安装到TFS集合中。使用带XPath的标记化/常规步骤更改相应的值

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

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

然后旧值将更改为新值。 结果:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="TestKey1" value="New value" />
  </appSettings>
</configuration>
要了解有关此步骤的更多信息,请执行以下操作:


它正在等待。我需要我的TFS管理员有时间下载/安装/测试的东西。。。但我尝试在Powershell中实现同样的功能。我还没有完全做完,但到目前为止看起来promising@Guillaume是否要替换powershell脚本文件中的某些值?否,我要用powershell替换配置文件中的值。你的答案并不完全是我想要的,但我认为已经足够接近了,所以我接受了。我不认为我能以一种非常简单的方式实现我最初想要的目标。
{
      "Default Environment":{
          
          "ConfigChanges":[
             {
                "KeyName":"/configuration/appSettings/add[@key='TestKey1']",
                "Attribute":"value",
                "Value":"New value"
             }
          ]
       }
    }
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="TestKey1" value="New value" />
  </appSettings>
</configuration>