web.config 为 <applicationSettings> 转换

web.config transforms for <applicationSettings>

我有几个环境的 web.config 转换。在配置文件中,我有一个包含多个设置和值对的 applicationSettings 部分。

我已尝试根据我用来匹配名称的语法并更改连接字符串以匹配设置并更改值,但转换失败。这是可能吗?

所以我的 web.config 有:

<applicationSettings>
    <AppName.My.MySettings>
        <setting name="setting1" serializeAs="String">
            <value>Initial Value</value>
        </setting>
    </AppName.My.MySettings>
</applicationSettings>

我的转换文件有

<applicationSettings>
    <add name="setting1" value="Changed Value" xdt:Transform="SetAttributes" xdt:Location="Match(name)"/>
</applicationSettings>

预览转换时我没有收到任何错误,但是连接字符串设置已转换,setting1 的值却没有。任何帮助表示赞赏。

更新

<applicationSettings>
    <add name="setting1" value="Changed Value" xdt:Transform="Replace" xdt:Location="Match(name)"/>
</applicationSettings>

不幸的是同样的问题...没有错误也没有转换。

解决方案 我确实忘记提到我有多个设置,所以标记的答案是部分解决方案......我就是这样做的...... Web.Config...

<applicationSettings>
    <AppName.My.MySettings>
        <setting name="setting1" serializeAs="String">
            <value>Initial Value 1</value>
        </setting>
        <setting name="setting2" serializeAs="String">
            <value>Initial Value 2</value>
        </setting>
        <setting name="setting3" serializeAs="String">
            <value>Initial Value 3</value>
        </setting>
    </AppName.My.MySettings>
</applicationSettings>

转换文件

<applicationSettings xdt:Transform="Replace">
    <AppName.My.MySettings>
        <setting name="setting1" serializeAs="String">
            <value>CHANGED VALUE 1</value>
        </setting>
        <setting name="setting2" serializeAs="String">
            <value>Initial value 2</value>
        </setting>
        <setting name="setting3" serializeAs="String">
            <value>CHANGED VALUE 3</value>
        </setting>
    </AppName.My.MySettings>
</applicationSettings>

请注意,我必须包括我所有的嵌套设置和值,即使其中一些设置和值没有像我示例中的设置 2 那样发生变化。

原始文件:

<applicationSettings>
    <AppName.My.MySettings>
        <setting name="setting1" serializeAs="String">
            <value>Initial Value</value>
        </setting>
    </AppName.My.MySettings>
</applicationSettings>

转换文件:

 <applicationSettings>
   <AppName.My.MySettings>
      <setting name="setting1" serializeAs="String">
           <value xdt:Transform="Replace">Changed Value</value>
       </setting>
    </AppName.My.MySettings>
  </applicationSettings>

转换文件:

<applicationSettings>
   <AppName.My.MySettings>
      <setting xdt:Transform="Replace" xdt:Locator="Match(name)" name="setting1" serializeAs="String">
           <value>New Value</value>
       </setting>
    </AppName.My.MySettings>
  </applicationSettings>

我知道这有点晚了,但是下面的转换文件将允许您在有多个设置时只转换一个设置。

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <applicationSettings>
    <YourProject.Settings>
      <setting name="Log4NetPath" serializeAs="String" xdt:Transform="Replace" xdt:Locator="Match(name)">
        <value xdt:Transform="Replace">NewPath</value>
      </setting>
    </YourProject.Settings>
  </applicationSettings>
</configuration>

https://hk.saowen.com/a/7857cf5ec8f14af8504e7b9bb029e4cb0047336394e464a9b3807a9e1e587b93

在单独的元素上使用变换和定位器属性

不必在与 Locator 元素相同的元素中设置 Transform 属性。您可以在父元素上指定 Locator 元素,以便 select 元素要使用其子元素。然后,您可以在子元素中指定 Transform 属性,以便将更改应用到子元素。

以下示例显示如何使用 Locator 属性为指定路径 select 定位元素。但是,只有 selected location 元素的子元素会被转换。

<configuration xmlns:xdt="...">
  <location path="C:\MySite\Admin" xdt:Locator="Match(path)"> 
    <system.web>
      <pages viewStateEncryptionMode="Always"
        xdt:Transform="SetAttributes(viewStateEncryptionMode)" />
    </system.web> 
  </location> 
</configuration>

如果您指定了 Locator 属性但未在同一元素或子元素中指定 Transform 属性,则不会进行任何更改。

同意以上回答。您需要确定是否要替换(转换)nodeattribute.

一个节点在这里是<value>Datasource=connection info</value>

一个属性在这里是名称<value name="connection info"/>

要替换 节点,您使用:

<value xdt:Transform="Replace">
Datasource="connection info";
</value>    

替换属性:

<value name="other connection info"
   xdt:Transform="SetAttributes"
   xdt:Locator="Match(name)"/>

更详细的替换属性参考: https://docs.microsoft.com/en-us/previous-versions/dd465326(v=vs.100)?redirectedfrom=MSDN