web.config转换为<applicationsettings>

时间:2015-07-03 13:29:01

标签: .net web-config web.config-transform

我有几个环境的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的情况一样。

5 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:6)

转换文件:

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

答案 2 :(得分:0)

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

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

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

下面的示例演示如何使用Locator属性为指定路径选择位置元素。但是,只有属于所选位置元素的子元素的元素才会被转换。

<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属性,则不会进行任何更改。

答案 3 :(得分:0)

同意以上回答。您需要确定是替换(转换)节点还是属性

节点在这里是<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

答案 4 :(得分:-4)

原始档案:

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