无法加载文件或程序集实体框架

本文关键字:程序集 实体 框架 文件 加载 | 更新日期: 2023-09-27 18:16:42

我已经部署了一个ASP。. NET MVC 4应用程序和主页加载良好,但当我尝试访问任何其他页面(所有尝试连接到SQL数据库)我得到这个错误:

无法加载文件或程序集'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。(异常来自HRESULT: 0x80131040)描述:在执行当前web请求期间发生了未处理的异常。请查看堆栈跟踪以获得有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。(Exception from HRESULT: 0x80131040)

我在网上查过了。配置文件,它有以下相关条目:

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
...
<compilation targetFramework="4.0" />

我已经阅读了所有我能在谷歌上找到的东西,但到目前为止没有任何帮助。我知道我构建应用程序所用的EF版本与部署机上的版本不同,但我可以使用一些指导来纠正这种差异。

无法加载文件或程序集实体框架

你似乎在。net Framework 4上使用EF5(因此你的配置文件中的版本是4.4.0.0),但你得到的例外是谈论EF 4.1(版本是4.1.0.0)。似乎你正在使用的一些程序集仍然尝试使用4.1,而其他EF5(4.4.0.0)。确保在任何地方引用相同的程序集。因此,您需要更新所有引用以使用EF5并重新构建项目。顺便说一句。配置文件中的条目只是将。net框架指向一个知道如何读取配置部分的类型,因此更新它以使应用程序适用于EF5

是不够的。

您可以尝试以下操作:

在解决方案资源管理器中转到参考节点并找到EntityFramework参考节点,然后在其属性设置为False中设置属性Specific Version

然后从web.config中删除版本标识符,替换为:

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
与简单:

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false" />

这样就可以解决版本不匹配导致的错误。

就像其他人在评论中说的,如果你从NuGet中获得所有的参考文献,并在你的源代码控制系统中签入所有的东西,那就太好了。

这种方法对我来说已经工作了很多次,并且不需要在web中进行任何更改。

在体验更新所有引用的乐趣之前,请尝试重新启动Visual Studio。

我在尝试在IIS Express上本地调试一个项目时遇到了这个问题。

我通过打开IIS Express选项并选择Stop Site手动卸载了该站点。

我的情况有点不同。dll在GlobalAssemblyCache中完全丢失,并且没有由VS.部署。我必须将EntityFramework.dll和EntityFramework.SqlServer.dll部署到GAC,因此使用以下Powershell脚本的GAC部署工作:

[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")            
$publish = New-Object System.EnterpriseServices.Internal.Publish            
$publish.GacInstall("C:'Path_To_DLL'EntityFramework.dll")
$publish.GacInstall("C:'Path_To_DLL'EntityFramework.SqlServer.dll")

如果您的项目名称与您引用的nuget包冲突,则可能发生这种情况。我浪费了大约3个小时才意识到发生了什么。因此,避免输入相同的名称例如引用名称