【问题标题】:Why does VS 2015 need a reference to System.Data.Entity but VS 2013 does not?为什么 VS 2015 需要引用 System.Data.Entity 而 VS 2013 不需要?
【发布时间】:2015-07-24 17:53:46
【问题描述】:

我已经安装了 VS 2015(虽然我之前安装了 RC,但不是 RC)。我打开了一个在 VS 2013 中运行良好的现有解决方案并收到以下错误。

BC30652 组装“System.Data.Entity”所需的参考, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 包含类型“EntityObject”。将一个添加到您的项目中。

我按照 VS 的建议在项目中添加了对 System.Data.Entity 的引用,并且它起作用了。但是,我想知道为什么会这样。

如果我删除 System.Data.Entity 引用,VS 2013 仍然有效,但 VS 2015 会抛出错误。该项目确实有对 System.Data 的引用。

解决方案注意事项:

  • 最初在 VS 2013 中开发
  • .NET 4.0
  • 还引用了 System.Data
  • 有 2 个项目,一个主项目(导致错误)和一个 DAL
  • DAL 具有实体数据模型 (.edmx)

【问题讨论】:

  • 这只是在黑暗中拍摄,但这可能是由于编译器处理传递依赖的方式发生了变化。例如。假设您的项目 A 依赖于库 B,并且 B 公开了从 EntityObject 派生的公共类型 C。那么 A 是否需要对实体框架的引用通常取决于它对类 C 的作用。不幸的是,没有关于它如何工作的硬性规则,它可能取决于编译器的实现。由于 VS 2015 和 .NET 4.6 带有新的 C# 和 VB 编译器,规则可能已经发生了微妙的变化。
  • @divega 你知道我可以在黑暗中测试你的镜头吗?
  • 首先,您能否确认您的应用程序依赖于一个库,该库公开了一个派生自 EntityObject 的公共类型?如果是,您能否在问题中添加更多关于应用程序代码如何与该类型交互的信息?有了这些信息,就有可能创建一个简单的重现(不需要涉及 EF),我们可以向语言人员介绍。也有可能想出一个解决方法,这样您就不需要添加引用,如果这是您所追求的。
  • 我可以确认 VS 2015 打破了传递依赖,至少对我来说是这样。我有一个简单的解决方案,其中项目 A 引用库 B,而库 B 又引用库 C。项目 A 不直接引用库 C,而是通过库 B 使用它的类型。自 2003 年以来,它可以在每个 VS 中正确编译和运行,但是不是在 2015 年。我得到相同的错误代码 BC30652
  • 导致错误的项目引用了数据访问层。 DAL 有一个实体数据模型。我认为你们正在做某事。

标签: entity-framework reference visual-studio-2015


【解决方案1】:

我从 Visual Basic 语言团队得到确认,这很可能是由于他们在 Visual Studio 2015 中的编译器发生了变化:

...我们确实努力让事情变得更加宽容。但总结是编译器可能需要更多的引用来保证正确性。如果可以,请添加它们。如果您调用灯泡,我相信有一个快速解决方法。

【讨论】:

猜你喜欢
  • 2012-02-17
  • 2019-04-13
  • 2023-03-28
  • 2010-10-13
  • 2018-03-18
  • 1970-01-01
  • 2018-07-30
  • 2011-06-18
  • 2021-04-13
相关资源
最近更新 更多