【问题标题】:Under what conditions would we use the <remove> before each <add> in a web.config在什么情况下我们会在 web.config 中的每个 <add> 之前使用 <remove>
【发布时间】:2019-02-15 18:24:46
【问题描述】:

我一直在 web.config 中查看一些遗留代码,其中在每个 &lt;add...&gt; 之前的大多数组部分下添加了 &lt;remove...&gt;,例如:

<connectionStrings>
    <remove name="abcDb" />
    <add name="abcDb" connectionString="..." providerName="System.Data.SqlClient" />

</connectionStrings>

如果出于某种奇怪的原因将该部分添加到机器配置文件中,仅仅再次添加相同的部分并被覆盖是否不够?

除非我错过了一个技巧,否则我们为什么要&lt;remove&gt; 然后&lt;add&gt; 而不仅仅是&lt;add&gt;

【问题讨论】:

    标签: asp.net .net web-config


    【解决方案1】:

    如果您&lt;add ... 一个元素已经添加到更高级别的配置文件中,则不允许(除非该值完全匹配)。

    当您尝试访问您的连接字符串(或以其他方式导致加载该配置部分)时,您将收到错误消息:

    已添加条目“LocalSqlServer”。

    Line 12:   </appSettings>
    Line 13:  <connectionStrings>
    Line 14:      <add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|fruitbat.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
    Line 15:  </connectionStrings>
    Line 16:   <system.web>
    

    这就是为什么在添加您自己可能已在其他地方配置的值之前,您应该 &lt;remove ...(或者,我的偏好是普通的 &lt;clear/&gt;)。


    (这里,我在web.config 中添加了一个LocalSqlServer 连接字符串,尽管在以后的框架中默认情况下machine.config 中已经配置了这样的连接)

    【讨论】:

      【解决方案2】:

      您在部署到多个环境时主要使用删除标签。检查此站点,它可以帮助您转换 web.config。

      https://webconfigtransformationtester.apphb.com/

      基本上它会删除键“abcDb”并根据您尝试部署的环境重新添加具有不同值的相同键。

      【讨论】:

      • 仅仅添加还不够吗?
      • 添加相同的键和值没有问题。如果您需要通过 CI-CD 过程更改 Prod 中连接字符串的值,这是实现它的方法之一。
      • 对于通过 CI-CD 等进行的生产,我们通常会使用“web.release.config”等,我仍然认为没有理由在“添加”之前需要“删除”。不过感谢您的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多