使用派生类时的必要引用

本文关键字:引用 派生 | 更新日期: 2023-09-27 18:33:02

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

  • 测试守护进程
  • Test.DataAccess

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

  • EntityFramework 5 通过 NuGet for Test.DataAccess 安装
  • Test.DataAccessTest.Daemon中被引用

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

TestDbContext ctx = new TestDbContext();

产生的错误:类型"System.Data.Entity.DbContext"是在未引用的程序集中定义的。必须添加对程序集"实体框架,版本=5.0.0.0,区域性=中性,公钥令牌=b77a5c561934e089"的引用

一旦我在Test.Daemon中引用 EF,代码就可以正常工作。

为什么引用包含派生类并且

本身具有对派生类的引用的项目是不够的?

使用派生类时的必要引用

为什么引用包含派生类并且

本身具有对派生类的引用的项目是不够的?

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

现在,为什么 Visual Studio 不自动添加您依赖的其他程序集? 好吧,我嘟囔着。 您实际上不需要任何程序集,除非您实际正在执行其中存在的代码。 因此,如果我引用程序集 x,并且仅使用程序集 x 中不依赖于程序集 y 的部分,则不需要程序集 y。