ASP.NET项目configSource文件父级重复使用报错及虚拟路径配置问题
嘿,我踩过这个坑!如果你在VS2010(或者VS2015之前的版本)开发ASP.NET网站,用了虚拟路径(比如http://localhost:12345/myvirpath),还在Web.config里通过configSource引用自定义配置文件,就像下面这样:
<configuration> <configSections> <section name="MyConfig" type="mydomain.MyConfig_Model, mydomain" /> </configSections> <ConfigRoot configSource="mycustom.config" /> ... </configuration>
开发环境测试一切正常,结果运行或部署时突然弹出**“将配置源文件'mycustom.config'也被父级使用,此操作不被允许”**的错误?别着急,这是旧版VS的ASP.NET开发服务器(Cassini)和IIS处理虚拟路径配置文件的逻辑差异导致的,给你几个实用的解决办法:
方法1:改用
file属性替代configSourceconfigSource的限制比较严格,它要求配置文件必须是完整的配置节,而且不能被父级配置和子级配置同时引用;而file属性就灵活很多,支持引用外部文件中的部分配置,还能兼容父子配置的层级引用。修改后的Web.config代码如下:<configuration> <configSections> <section name="MyConfig" type="mydomain.MyConfig_Model, mydomain" /> </configSections> <MyConfig file="mycustom.config" /> ... </configuration>注意:
file属性适用于自定义配置节,系统内置的配置节(比如appSettings)也支持,但要确保外部文件里只包含对应节的内容——比如mycustom.config里只放<MyConfig>...</MyConfig>的内容就行。方法2:确保自定义配置文件独立于父级配置
如果非要坚持用configSource,那得保证mycustom.config只存在于当前网站的根目录,而且父级站点(比如localhost的根站点)的Web.config绝对不能引用这个文件。另外检查IIS的站点配置,把虚拟目录的应用程序池设置为独立的,避免父级配置的影响。方法3:升级开发和服务器环境
这个问题在VS2015及之后的版本,以及IIS 7.5+的环境中已经被优化修复了。如果有条件升级的话,不仅能解决这个报错,还能获得更好的开发体验和服务器性能。
内容的提问来源于stack exchange,提问作者Chinor

