35

在过于仓促升级到 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 的引用,但没有找到。

4

12 回答 12

43

在尝试在 repositories.config 和其他地方查找对 EntityFramework 的引用失败后,我在编辑 Web.config 以帮助诊断时偶然发现了 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
  • 删除这些引用的任何后果

我有兴趣学习。

于 2012-07-31T21:20:06.120 回答
21

我有这个问题,我所做的只是确保我在所有项目中引用了正确的 .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"/>

所有作品..

于 2013-08-02T14:38:08.487 回答
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。

希望这可以帮助某人...

于 2013-05-23T13:31:14.437 回答
4

我在 Jenkins 下使用 MSTEST 运行单元测试时遇到了类似的问题。我的解决方法是删除“Version=6.0.0.0”,如下所示:

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 文件进行此更改。

于 2015-06-04T12:03:08.783 回答
3

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

于 2016-05-24T19:33:47.213 回答
2

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

在此处输入图像描述

于 2013-01-19T01:19:42.023 回答
2

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

1) 我通过单击工具 > NuGet 包管理器 > 包管理器控制台启动 NuGet 管理器控制台 2) 我通过键入以下命令卸载了已安装的 EntityFramework 6.1.1:

Uninstall-package EntityFramework

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

Install-Package EntityFramework -version 5.0.0

问题已解决。

于 2014-10-12T19:25:33.187 回答
1

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

于 2013-07-03T13:22:21.357 回答
0

我有同样的问题。我得到了 System.Data.Entity.Infrastructure;错误,它只是 v5.0 或更高版本的一部分。只需右键单击引用并选择“管理 NuGet 包”。在 Installed Package 选项中,卸载已安装的 Entity FrameWork 并安装 5.0 版本。它解决了问题。我试图手动获取 System.Data.Entity 参考,但没有成功。

于 2013-04-10T23:38:42.750 回答
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。因此,要降级,请在包管理器控制台中发出以下命令:

卸载包EntityFramework

安装包 EntityFramework -版本 4.3.1

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

于 2013-04-12T22:01:23.010 回答
0

我有一个类似的问题:

  1. 在我的 ASP.NET MVC 项目中,我已将 Sql Server Compact 数据库 (sdf) 添加到我的 App_Data 文件夹中。VS 添加了对 EntityFramework.dll, version 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" />

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

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

于 2013-07-09T09:09:03.250 回答
0

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

于 2017-10-03T06:29:26.260 回答