部分Web.config文件搜索和替换(Web.config partial search and

2019-10-23 15:20发布

我在C#应用程序App.config文件。 我想部分替代使用XDT变换分析匹配“.UAT”与“.PROD”所有按键。

<?xml version="1.0"?>    
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

<appSettings>
    <add key="MyParam1.UAT" value="param1"/>
    <add key="MyParam2.UAT" value="param2"/>
    <add key="MyParam2.UAT" value="param3"/>
  </appSettings>
</configuration>

这是我想要的输出

    <?xml version="1.0"?>    
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
        <appSettings>
            <add key="MyParam1.PROD" value="param1"/>
            <add key="MyParam2.PROD" value="param2"/>
            <add key="MyParam2.PROD" value="param3"/>
          </appSettings>
        </configuration>

到目前为止,我已经尝试过这种使用CustomTransform但它取代只有一个元素,而不是所有的元素。 我怎样才能得到它来取代所有元素

    <?xml version="1.0"?>    
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->    
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

<appSettings>
    <add xdt:Locator="Condition(contains(@key, '.UAT'))" xdt:Transform="AttributeRegexReplace(Attribute='key', Pattern='.UAT',Replacement='.PROD')" />
  </appSettings>
</configuration>

Answer 1:

我找到了答案在这里 ,我不得不更换这种方法遍历所有属性的应用方法

protected override void Apply()
{
    foreach (XmlNode target in this.TargetNodes)
    {
        foreach (XmlAttribute att in target.Attributes)
        {
            if (string.Compare(att.Name, this.AttributeName, StringComparison.InvariantCultureIgnoreCase) == 0)
            { // get current value, perform the Regex 
                att.Value = Regex.Replace(att.Value, this.Pattern, this.Replacement);
            }
        }
    }
}


文章来源: Web.config partial search and replace