在什么情况下我们会在 web.config 中的每个 <add> 之前使用 <remove>

Under what conditions would we use the <remove> before each <add> in a web.config

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

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

</connectionStrings>

如果由于某些奇怪的原因在机器配置文件中添加了该部分,是否仅再次添加相同的部分并被覆盖还不够吗?

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

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

https://webconfigtransformationtester.apphb.com/

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

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

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

The entry 'LocalSqlServer' has already been added.

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>

因此,这就是为什么您应该 <remove ...(或者,我的偏好,一个普通的 <clear/>),然后再添加您自己的可能已在其他地方配置的值。


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