279

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

4 回答 4

483

你想要这样的东西:

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

于 2012-06-14T15:19:22.367 回答
13

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

于 2018-01-18T16:44:54.853 回答
11

如果您想将您的应用设置从 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 的值转换为 realese 模式下的新值。

于 2018-05-01T12:31:44.437 回答
2

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

于 2019-12-10T20:14:06.513 回答