防止在子应用程序中继承不兼容的配置部分

Prevent inheritance of incompatible configuration section in child application

项目A 使用 entity framework 4.4.0.0 并在 web.config

中有以下条目
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

项目 B 使用 entity framework 6.0.0.0 并在 web.config

中有以下条目
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

项目 B 在 IIS 中的项目 A 下托管(项目 B 是虚拟目录,后来转换为 Web 应用程序)

如果我访问项目 B,它会在浏览器中显示 entity framework 有重复条目的消息。

我评论了项目 B 中的条目

<!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />-->

这使得项目 B 运行,但是一旦它从数据库访问数据,就会抛出异常。

为 entityFramework 创建配置节处理程序时发生错误:无法加载文件或程序集 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。

我无法编辑项目 A EF 或项目 B EF,因为我没有访问权限

关于如何处理这个问题有什么建议吗?

您可以通过禁止继承部分来做到这一点。为此,您可以将此属性添加到不应在父 web.config 中继承的内容:inheritInChildApplications="false"

如此处所述,并非所有元素都支持它,因此您可能必须在父级中执行此操作,并重新定义所有其他应继承的内容:How to stop inheritance of <configSections>in Web.Config This is a good solution for it: Avoid web.config inheritance in child web application using inheritInChildApplications

您还可以查看此 asp.net 日志的第 7 条提示:10 Things ASP.NET Developers Should Know About Web.config Inheritance and Overrides