2015-07-04 82 views
1

我在C#應用程序中有App.config文件。 我想使用xdt變換部分替換所有與「.UAT」匹配的「.PROD」。Web.config部分搜索和替換

<?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> 

回答

0

我發現answer here,我不得不用這種方法遍歷所有更換的應用方法屬性

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); 
      } 
     } 
    } 
}