1

我正在使用一个使用实体框架访问 mysql 数据库的简单守护程序。该解决方案包含两个项目:

  • 测试守护进程
  • 测试数据访问

Test.DataAccess将包含所有用于代码优先的类TestDbContext,还包含一个派生自DbContext

  • EntityFramework 5 是通过 NuGet 安装的Test.DataAccess
  • Test.DataAccess引用于Test.Daemon

现在,当我尝试在其中使用以下内容时,Test.Daemon它抱怨缺少对 EF 的引用:

TestDbContext ctx = new TestDbContext();

结果错误: “System.Data.Entity.DbContext”类型是在未引用的程序集中定义的。您必须添加对程序集 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的引用

只要我在Test.Daemon代码中引用 EF 就可以正常工作。

为什么引用包含派生类的项目并且本身具有对其派生类的引用是不够的?

4

1 回答 1

2

为什么引用包含派生类的项目并且本身具有对其派生类的引用是不够的?

我认为您在这里混淆了一些概念。程序集不派生自其他程序集,它们引用它们。这意味着要使用程序集,您必须拥有它引用的所有程序集的副本,依此类推。为什么它们不自动打包在一起?因为如果我的程序使用程序集 x、y 和 z,并且这些程序集都打包成一个公共程序集,这意味着我的程序中将拥有该公共程序集的三个副本。但是由于引用的原因,三个人都只使用了一个程序集副本。

现在,为什么 Visual Studio 不自动为您添加您所依赖的其他程序集?嗯,我撒谎了。除非您实际执行其中存在的代码,否则您实际上并不需要任何程序集。因此,如果我引用程序集 x,并且我只使用不依赖于程序集 y 的程序集 x 的一部分,我就不需要程序集 y。

于 2013-09-26T21:59:25.873 回答