是否有可能转换以下Web。配置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>

因此,我需要删除键developmodeuserid,并且我需要替换键developmode的值。


当前回答

替换所有AppSettings

这是一种过度的情况,您只是想替换web.config的整个部分。在这种情况下,我将替换web中的所有AppSettings。Config将在web.release.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。配置文件当我们发布时会发生什么:

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

正如我们所预料的——网络。config appSettings完全被web中的值所取代。发布配置。这很简单!

其他回答

替换所有AppSettings

这是一种过度的情况,您只是想替换web.config的整个部分。在这种情况下,我将替换web中的所有AppSettings。Config将在web.release.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。配置文件当我们发布时会发生什么:

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

正如我们所预料的——网络。config appSettings完全被web中的值所取代。发布配置。这很简单!

我不喜欢转换有任何超过所需的信息。因此,我不再重述键,而是简单地陈述条件和意图。这样做更容易看出意图,至少在我看来是这样。此外,我尝试将所有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。

你想要的是:

<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配置文件转换为web. release。配置时,您必须执行以下步骤。 让你的网。配置应用程序设置文件是这样的-

<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的值转换为新值。