如何通过Web.config转换更改appSettings部分中的attribute值


260

是否可以转换以下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的值。

Answers:


452

您想要类似的东西:

<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应用程序项目部署的Web.config转换语法


24
请注意,按键区分大小写!
Cosmin

2
极好的答案。我正在尝试像“慢猎豹”这样的第三方选择,却一无所获-这是简单而完美的。
史蒂夫

2
@stevens:如果要转换本机应用程序的app.config文件,则需要Slow Cheetah。但是,如果我记得的话,语法应该是相同的(已经有一段时间了,因为我不得不使用“慢猎豹”)。
Ellesedil '16

慢作弊者的另一种选择是创建myotherconfig.staging.config并在web.Staging.config转换中,将引用转换为web.config中的myotherconfig.config
nologo

3
可能需要帮助的一些小问题:该xdt:Transform="SetAttributes" xdt:Locator="Match(key)"部件应在Web.Whatever.config中使用,而不是在Web.config文件中使用。
user3533716

11

取代所有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配置中的值完全替代。那很简单!


9

如果要将应用程序设置从Web配置文件转换为Web.Release.config,则必须执行以下步骤。让您的web.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的值转换为新值。


1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.