使用派生类时的必要引用
本文关键字:引用 派生 | 更新日期: 2023-09-27 18:33:02
我正在使用一个简单的守护程序,它使用实体框架访问mysql数据库。该解决方案包含两个项目:
- 测试守护进程
- Test.DataAccess
Test.DataAccess
将包含用于代码优先的所有类,并且还包含派生自DbContext
的类TestDbContext
- EntityFramework 5 通过 NuGet for
Test.DataAccess
安装 -
Test.DataAccess
在Test.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。