【问题标题】:To remove array string item from config file从配置文件中删除数组字符串项
【发布时间】:2021-03-20 13:59:40
【问题描述】:

如何从配置文件中删除字符串数组项?

<configuration>
  <applicationSettings>
    <Sample.Service.Properties.Settings>
      <setting name="SampleAttribute" serializeAs="Xml">
        <value>
          <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <string>firstemail@domain.com</string>
            <string>secondemail@domain.com</string>
          </ArrayOfString>
        </value>

我能够从配置文件中访问第一项 (firstemail@domain.com),并且可以用以下代码替换该值。 但我的问题是如何通过以下类似代码从配置文件中删除第二项(secondemail@domain.com)。

    {
"configuration/applicationSettings/Sample.Service.Properties.Settings/setting[@name='SampleAttribute']/value/ArrayOfString/string[0]":"$(SampleAttribute)"
}

【问题讨论】:

  • 您能说出您使用什么任务来应用此转换吗?
  • @KrzysztofMadej,我正在使用Config Transform 任务。
  • @Developer,这个问题怎么样?下面的答案是否解决了您的问题,如果是,您可以 Accept it as an Answer ,这样它可以帮助遇到相同问题的其他社区成员,我们可以存档这个帖子,谢谢。

标签: azure powershell azure-devops azure-pipelines azure-pipelines-release-pipeline


【解决方案1】:

从配置文件中删除数组字符串项

恐怕我们无法使用文件转换(不确定你说的Config Transform是file Transform还是Config Transformation)来删除数组字符串项。

要解决此问题,您可以使用任务Replace Tokens 替换第一项并删除第二项:

配置文件中变量的格式为#{EmailOne}# & #{EmailTwo}#。

我的测试配置文件如:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <applicationSettings>
    <Sample.Service.Properties.Settings>
      <setting name="SampleAttribute" serializeAs="Xml">
        <value>
          <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <string>#{EmailOne}#</string>
            #{EmailTwo}#
          </ArrayOfString>
        </value>
      </setting>
    </Sample.Service.Properties.Settings>
  </applicationSettings>
</configuration>

那么我们只需要在Variables中定义变量EmailOne和EmailTwo用replace值和empty值:

测试结果:

内联 Powershell 脚本:

$appConfigFile = "$(System.DefaultWorkingDirectory)\xxx\xxx\web.config" #change the path to your config file.

$appConfig = New-Object XML
$appConfig.Load($appConfigFile)
foreach($BuildNumber in $appConfig.configuration.applicationSettings."Sample.Service.Properties.Settings".setting.value.ArrayOfString)
{

$BuildNumber.RemoveChild($BuildNumber.FirstChild.NextSibling)


}
$appConfig.Save($appConfigFile)

【讨论】:

  • 感谢您的回复。在上面的答案中,我们需要在配置文件中添加#。有什么办法不用修改配置文件,能不能做到。
  • @Developer,答案应该是肯定的,我们可以使用powershell脚本通过脚本将其删除。但这需要我们精通powershell脚本。对于powershell,我只知道一点,恐怕不能给你完整的代码。使用上面的任务,很容易实现。
  • 非常感谢。我正在更新问题标签以包含 Powershell 标签。
  • @Developer,随时欢迎您。希望powershell方面的一些高手能提供完美的解决方案(虽然这有点难)。另外,我会尽量写。我会让你知道结果。祝你有美好的一天。
  • @Developer,我创建了一个 powershell 脚本来解决这个问题,我测试它在我这边工作正常。
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多