ASP.NET中如何同时使用configSource与configBuilders?
问题根因
这个错误是.NET配置系统的固有规则限制:当配置节使用configSource属性引用外部配置文件时,Web.config中对应的节节点不允许添加任何其他属性或子元素。
推荐解决方案:将configBuilders属性移到外部配置文件的节根节点
仅需调整两处配置即可兼容你的需求,无需修改业务逻辑:
- Web.config中的
connectionStrings节点保留原有写法,不要添加configBuilders属性:
<connectionStrings configSource="myconfig.config"/>
- 修改
myconfig.config文件,在根节点connectionStrings上添加configBuilders="Env"属性:
<?xml version="1.0" encoding="utf-8"?> <connectionStrings configBuilders="Env"> <add name="db1" connectionString="conn1" providerName="prov1" /> <add name="db2" connectionString="conn2" providerName="prov2" /> <add name="db3" connectionString="conn3" providerName="prov3" /> </connectionStrings>
该方案完全保留了configSource的配置隔离能力,同时环境变量配置构造器会正常生效,可自动匹配对应命名规则的环境变量,覆盖配置文件中的连接字符串值。
备选方案:用file属性替代configSource
如果你的场景不允许修改外部配置文件,可使用file属性替代configSource,二者的差异为:
configSource要求外部文件包含整个配置节的全部内容,Web.config对应节不能有其他内容file属性支持将外部文件的配置项与Web.config中现有配置项合并
调整Web.config写法如下即可:
<connectionStrings configBuilders="Env" file="myconfig.config"> <!-- 可放置默认配置,也可留空,最终会和myconfig.config的内容合并 --> </connectionStrings>
注意该模式下如果myconfig.config和Web.config存在同名的连接字符串配置,会以Web.config中的配置为准。
内容的提问来源于stack exchange,提问作者Dhruv Kapoor
相关产品推荐
相关产品推荐

