如何使用Web.config转换更改appSettings部分中的属性值

时间:2012-06-14 12:22:55

标签: c# asp.net .net web-config

是否可以转换以下Web.config appSettings文件:

<appSettings>
    <add key="developmentModeUserId" value="00297022" />
    <add key="developmentMode" value="true" />
    /* other settings here that should stay */
</appSettings>

这样的事情:

<appSettings>
    <add key="developmentMode" value="false" />
    /* other settings here that should stay */
</appSettings>

所以,我需要删除密钥 developmentModeUserId ,我需要替换密钥 developmentMode 的值。

4 个答案:

答案 0 :(得分:419)

你想要这样的东西:

<appSettings>
  <add key="developmentModeUserId" xdt:Transform="Remove" xdt:Locator="Match(key)"/>
  <add key="developmentMode" value="false" xdt:Transform="SetAttributes"
          xdt:Locator="Match(key)"/>
</appSettings>

另请参阅:Web.config Transformation Syntax for Web Application Project Deployment

答案 1 :(得分:7)

如果要将应用程序设置从Web配置文件转换为web.Release.config,则必须执行以下步骤。 让你的w​​eb.config应用程序设置文件是这个 -

<appSettings>
     <add key ="K1" value="Debendra Dash"/>
  </appSettings>

现在这里是转换的web.Release.config。

<appSettings>
    <add key="K1" value="value dynamicly from Realease"
       xdt:Transform="SetAttributes"
          xdt:Locator="Match(key)"   
         />
  </appSettings>

这会将K1的值转换为realese模式中的新值。

答案 2 :(得分:5)

替换所有AppSettings

这是一个过度杀伤的情况,你只想替换web.config的整个部分。在这种情况下,我将替换web.config中的所有AppSettings将web.release.config中的新设置。这是我的基线web.config appSettings:

<appSettings>
  <add key="KeyA" value="ValA"/>
  <add key="KeyB" value="ValB"/>
</appSettings>

现在在我的web.release.config文件中,我将创建一个appSettings部分,除了我将包含属性xdt:Transform =“Replace”,因为我只想替换整个元素。我没有必要使用xdt:Locator,因为没有什么可以找到的 - 我只是想清理平板并替换所有内容。

<appSettings xdt:Transform="Replace">
  <add key="ProdKeyA" value="ProdValA"/>
  <add key="ProdKeyB" value="ProdValB"/>
  <add key="ProdKeyC" value="ProdValC"/>
</appSettings>

请注意,在web.release.config文件中,我的appSettings部分有三个键而不是两个键,键也不一样。现在让我们看一下生成的web.config文件,当我们发布时会发生什么:

<appSettings>
   <add key="ProdKeyA" value="ProdValA"/>
   <add key="ProdKeyB" value="ProdValB"/>
   <add key="ProdKeyC" value="ProdValC"/>
 </appSettings>

正如我们所料 - web.config appSettings完全被web.release配置中的值取代。那很简单!

答案 3 :(得分:0)

我不希望转换包含比所需更多的信息。因此,我只需要声明条件意图,而不是重新声明键。至少在IMO时,这样做的意图要容易得多。另外,我尝试将所有xdt属性放在首位,以向读者表明,这些是转换,而不是正在定义的新事物。

<appSettings>
  <add xdt:Locator="Condition(@key='developmentModeUserId')" xdt:Transform="Remove" />
  <add xdt:Locator="Condition(@key='developmentMode')" xdt:Transform="SetAttributes"
       value="false"/>
</appSettings>

在上面,很容易看到第一个正在删除元素。第二个是设置属性。它将设置/替换您在此处定义的任何属性。在这种情况下,只需将value设置为false