在什么情况下我们会在 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
中配置了这样的连接)
我一直在 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
中配置了这样的连接)