我正在使用一个简单的守护进程,它使用实体框架访问mysql数据库。 该解决方案包含两个项目:
Test.DataAccess
将包含用于代码优先的所有类,还包含从TestDbContext
DbContext
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,代码就可以正常运行。
为什么引用包含派生类的项目并且它本身引用了它派生的类是不够的?
答案 0 :(得分:2)
为什么引用包含派生类的项目并且它本身引用了它派生的类是不够的?
我认为你在这里混淆了一些概念。程序集不是从其他程序集派生的,它们引用它们。这意味着要使用程序集,您必须拥有它引用的所有程序集的副本,依此类推。为什么他们不会自动打包在一起?因为如果我的程序使用程序集x,y和z,并且那些程序集都打包了一个通用程序集,那意味着我的程序中将有三个副本。但由于引用,所有三个都只使用了一个程序集副本。
现在,为什么Visual Studio不会自动添加您依赖的其他程序集?好吧,我蠢蠢欲动。除非您实际执行其中存在的代码,否则您实际上不需要任何程序集。因此,如果我引用程序集x,并且我只使用不依赖于程序集y的程序集x的一部分,那么我不需要程序集y。