【问题标题】:Entity Framework 5 and 6 in the same applicationEntity Framework 5 和 6 在同一个应用程序中
【发布时间】:2013-12-31 19:32:43
【问题描述】:

我想在同一个项目中使用不同版本的实体框架。? 我有两个应用程序: - 一个带有 EF5 - 第二个使用 EF6 并引用第一个项目(那些使用 ef5 的项目)

现在我想在第二个中使用第一个中的方法。 但是……

我有这个问题,因为当我从 ef5 应用程序运行方法时,它说:

无法加载文件或程序集“EntityFramework,版本 = 5.0.0.0,文化 = 中性,PublicKeyToken = b77a5c561934e089”或其依赖项之一。定位程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

如何在同一个项目中使用不同版本的EF dll?

建议?谢谢。

【问题讨论】:

  • 您需要绑定重定向。
  • 你的意思是这里? stackoverflow.com/questions/2460542/…
  • 好的,但是绑定重定向并没有解决我的问题。我想同时使用 EF5 和 EF6 - 不要使用 EF6 而不是 EF5

标签: c# entity-framework


【解决方案1】:

您不能将同一程序集的多个版本加载到单个应用程序域中。 .NET Framework 不支持它。您必须使用:

  • 在两个“应用程序”中使用单一版本的 EF - 如果您需要在第二个应用程序中使用来自第一个应用程序的 EF 相关代码,这应该是正确的方法
  • 重构第一个应用程序并将您需要重用的所有方法移动到不依赖于 EF 的单独程序集中 - 如果您可以从 EF 中抽象代码,这应该是正确的方法
  • 在单独的应用程序域中从第一个应用程序执行代码 - 不要使用这种方法。这就像在一个 Windows 进程中运行两个“.NET 进程”。您必须使用进程间通信在两个应用程序域之间传递数据。

通常还有绑定重定向的选项,但我担心它在这种情况下不起作用,因为 EF6 带来了太多的重大变化。

【讨论】:

  • 还有一个选项——我不推荐,但为了完整性想提一下——是修改 EF6 以赋予它一个独特的程序集名称。 (它是开源的,并且许可证允许。)
  • @hvd,这行不通,因为你会有一堆命名空间冲突
  • @taiji123 仅当单个程序集同时引用 EF5 和 EF6 时,OP 并非如此。在 OP 的情况下,A 引用了 EF5,因此没有命名空间冲突。 B 引用了 EF6 和 A,但没有直接引用 EF5,因此也没有命名空间冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2015-06-10
  • 2015-12-21
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多