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

本文关键字:设置部 属性 应用 Web 何使用 config 转换 | 更新日期: 2023-09-27 18:37:05

是否可以转换以下 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>
因此,我需要删除密钥开发模式

用户 ID,并且我需要替换密钥开发模式的值。

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

你想要这样的东西:

<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 转换语法

替换所有应用设置

这是矫枉过正的情况,您只想替换 web.config 的整个部分。 在这种情况下,我将替换web.config中的所有AppSettings和web.release.config中的新设置。 这是我的基线web.config应用程序设置:

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

现在在我的web.release.config文件中,我将创建一个appSettings部分,除了我将包含属性xdt:Transform="Replace",因为我只想替换整个元素。 我不必使用 xdt:定位器,因为没有什么可定位的——我只想把石板擦干净并更换所有东西。

<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 config 中的值所取代。 这很容易!

如果要将应用设置从 Web 配置文件转换为 Web。发布.config,您必须执行以下步骤。让你的web.config应用设置文件是这样的-

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

现在这里是网络。Release.config 用于转换。

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

这会将 K1 的值转换为真实模式下的新值。

我不喜欢转换包含比需要更多的信息。因此,我不是重述密钥,而是简单地陈述条件意图。这样做更容易看到意图,至少 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 .