如何通过 VSTS 发布定义覆盖 windows 服务 .exe.config 文件中的键

How to override the keys in windows services .exe.config file through VSTS release definition

我正在处理用于部署 Windows 服务项目的 VSTS 发布任务。不幸的是,我们没有为创建放置文件夹创建任何构建定义。 但是,我的客户会为这个项目提供放置文件夹,我需要的是在发布级别“我想覆盖现有 .exe.config 文件的密钥”。

为了创建 Windows 服务部署任务,我遵循了这个 Windows Services Extension

例如,我的放置文件夹如下所示:

非常感谢此参考 article,它对于使用 Power Shell 命令更改配置文件中的值非常有用。我对该参考 link 有疑问: 例如,如果有这样的代码:

<erecruit.tasks>
<tasks>
  <task name="AA" taskName="AA">
    <parameters>
      <param key="connectionString">Server="XXXX"</param>
    </parameters>
</task>

如何更改上面的连接字符串值?

您可以在 Release Management Utility tasks 扩展中使用 Tokenizer 任务。

  1. 安装发布管理实用程序任务扩展
  2. 将带有 XPath/Regular 表达式任务的 Tokenizer 添加到发布定义(指定源文件名和配置 Json 文件名)

配置文件示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
      <add key="TestKey1" value="__Token1__" />
      <add key="TestKey2" value="__Token2__" />
      <add key="TestKey3" value="__Token3__" />
      <add key="TestKey4" value="__Token4__" />
    </appSettings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
</configuration>

配置Json文件(默认环境是发布定义中的环境名称):

{
   "Default Environment":{
      "CustomVariables":{
         "Token2":"value_from_custom2",
         "Token3":"value_from_custom3"
      },
      "ConfigChanges":[
         {
            "KeyName":"/configuration/appSettings/add[@key='TestKey1']",
            "Attribute":"value",
            "Value":"value_from_xpath"
         }
      ]
   }
}

那么TestKey1(key)的值会和value_from_xpath相关,TestKey2TestKey3的值会和value_from_custom2相关和 value_from_custom3.

另一方面,如果不指定配置 Json 文件名,则可以直接使用发布变量。

例如你的配置文件中有__TokenVariable1__,发布定义中有TokenVariable1 release/environment变量,那么__TokenVariable1__将被替换为分词器任务。

相关文章:Using Tokenization (Token Replacement) for Builds/Releases in vNext/TFS 2015

更新:

您也可以直接通过 PowerShell 完成。

Update configuration files using PowerShell