降级EF 5.0.0.0后无法加载文件或程序集'EntityFramework' - > 4.3.1.0

时间:2012-07-31 21:20:06

标签: entity-framework

在急忙升级到EF 5.0.0.0 RC并且无法使用不会部署到Windows Azure(.NET 4.0及更低版本)的.NET 4.5项目之后,我决定降级到EF 4.3.1.0。

我不确定执行此类迁移的最佳方式,但我的策略是使用"管理NuGet包"确定哪些项目引用了包,取消选中每个项目的包,安装替换项并重新检查正确的项目。

不幸的是,在执行此操作后,我的解决方案产生了名称" FileLoadException"。

Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral,        
PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's 
manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我搜索了解决方案文件,特别是packages.config,以获取对EF 5.0.0.0 RC的引用但却找不到。

12 个答案:

答案 0 :(得分:42)

尝试在repositories.config和其他地方找到对EntityFramework的引用失败后,我偶然发现了Web.config中的引用,因为我正在编辑它以帮助我进行诊断。

bindingRedirect引用了5.0.0.0,它已不再安装,这似乎是异常的来源。老实说,我没有添加对Web.config的引用,并且在尝试在单独的项目中复制错误之后,发现NuGet包安装程序没有添加它,所以,我不知道为什么它在那里但添加了一些东西它

<dependentAssembly>
  <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

我决定用工作项目中的等效元素替换它。注意,对5.0.0.0的引用将替换为以下4.3.1.0:

<dependentAssembly>
  <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
</dependentAssembly>

这很有用!

然后我决定完整地删除EntityFramework的dependentAssembly引用。

它仍然有用!

所以,我在这里发布这个作为一个自我回答的问题,希望它能帮助别人。如果有人能向我解释:

  • 将EntityFramework的dependentAssembly添加到我的Web.config中的内容
  • 删除这些参考文献的任何后果

我有兴趣学习。

答案 1 :(得分:18)

我遇到了这个问题,我所做的只是确保我在所有项目中引用了正确的.Net框架,然后从

更改web.config

来自

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

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

一切正常......

答案 2 :(得分:5)

更新旧项目时遇到了同样的问题。以下是我为解决问题所做的工作:

  • 将所有项目转换为.NET 4.5。
  • 卸载了Entity Framework 5的NuGet包。
  • 重新安装了Entity Framework 5的NuGet包。
  • 清理解决方案。
  • 重建解决方案。

使用Entity Framework 5和.NET 4的项目正在安装Entity Framework dll版本4.4。一旦我在项目中将.NET版本切换到4.5,dll版本就是5。

我的问题来自.NET 4上的旧项目和运行.NET 4.5的新项目,所以我的解决方案中有2个dll版本的EF。

希望这有助于某人...

答案 3 :(得分:3)

我在Jenkins下使用MSTEST运行单元测试时遇到了类似的问题。在我的情况下修复是删除&#34;版本= 6.0.0.0,&#34;如下图所示:

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

New:
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Culture=neutral, PublicKeyToken=xxxx" requirePermission="false" />

我必须在我的多项目解决方案中进行此更改是几个App.config和Web.config文件。

答案 4 :(得分:3)

在构建项目时,如果在项目属性中显示它是在Target.NET Framework 4.5下构建的,则将其更新为4.6或4.6.1。然后,构建将能够在Web.config文件中找到Entity Framework 6.0。这种方法解决了我的问题。 Selecting Target framework from Project Properties

答案 5 :(得分:2)

如果您使用Visual Studio 2012 ASP.NET Web窗体应用程序模板,那么您将获得该引用。我假设它是你通过Nuget获得的,而不是框架System.Data.Entity引用。

enter image description here

答案 6 :(得分:2)

我收到了完全相同的错误消息。除了我的错误消息“无法加载文件或程序集'EntityFramework,Version = 6.0.0.0 ...”,因为我安装了EF 6.1.1。以下是我为解决问题所做的工作。

1)我点击工具&gt;启动了NuGet Manager Console。 NuGet包管理器&gt;包管理器控制台 2)通过键入以下命令卸载已安装的EntityFramework 6.1.1:

Uninstall-package EntityFramework

3)一旦我收到确认已成功卸载软件包,我通过输入以下命令安装了5.0.0版本:

Install-Package EntityFramework -version 5.0.0

问题得到解决。

答案 7 :(得分:1)

我有与硒有类似的问题: 我使用NuGet降级了我的selenium并得到了相同的错误消息。我的解决方案是从app.config文件中删除较新的版本行。

答案 8 :(得分:0)

我遇到了同样的问题。我得到了System.Data.Entity.Infrastructure;错误只是v5.0或更高版本的一部分。只需右键单击Reference并选择“Manage NuGet Package”。在“已安装的软件包”选项中,卸载已安装的“实体框架”并安装5.0版本。它解决了这个问题。我试图手动获取System.Data.Entity引用,但这并不成功。

答案 9 :(得分:0)

public Configuration()
{
    AutomaticMigrationsEnabled = false;

    // register mysql code generator

    SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
}

我发现连接器6.6.4不适用于Entity Framework 5,但使用Entity Framework 4.3。因此,降级会在程序包管理器控制台中发出以下命令:

Uninstall-Package EntityFramework

Install-Package EntityFramework -Version 4.3.1

最后我再次更新数据库-Verbose,瞧!架构和表已创建。等待下一版本的连接器将其与Entity Framework 5一起使用。

答案 10 :(得分:0)

我遇到了类似的问题:

  1. 在我的ASP.NET MVC项目中,我已将Sql Server Compact数据库(sdf)添加到我的App_Data文件夹中。 VS添加了对EntityFramework.dll,版本4. *的引用。 web.config文件已使用4. *配置进行了适当更新。

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

  2. 我在我的解决方案中添加了一个新项目(数据访问层项目)。这里我添加了一个EDMX文件。 VS添加了对EntityFramework.dll 5.0版的引用。 App.config文件已使用5.0配置

    进行了适当更新

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

  3. 执行时,从数据库读取时,应用程序始终抛出异常Could not load file or assembly 'EntityFramework, Version=5.0.0.0 ...

    通过从我的MVC项目中删除EntityFramework.dll v4.0来解决此问题。我还使用正确的5.0版本更新了web.config文件。然后一切都按预期工作。

答案 11 :(得分:0)

在您的参考文献中,点击EntitiyFramework。 转到属性并将特定版本设置为False。 它对我有用。