以下代码行会产生错误:
private MyContext context;
错误:
The type 'System.Data.Entity.DbContext' is defined in an assembly that is not referenced.
MyContext
扩展了DbContext,MyContext
在引用的程序集中定义。我从未在Java中看到过这种错误。 为什么编译器找不到依赖项引用的程序集中定义的类型?
答案 0 :(得分:1)
因为该程序集可能不存在。
想一想:
您已经创建了一个与COM端口配合使用的完美不错的DLL A 。但是,它引用某种System.IO.Comports.dll
库来按预期工作。
然后,有人想要使用 A 库并引用它。他怎么知道项目或bin文件夹或system32目录中存在System.IO.Comports.dll
库?或者在哪里寻找它?没有“有人”正在开发的EXE项目的直接引用。
直接引用总是被复制到输出目录,除了预先安装的引用 - 比如.NET Framework - 以确保可执行文件能够找到它们。
“System.Data.Entity.DbContext”类型在未引用的程序集中定义。
此类型可能在具有多个版本的多个库中定义,并且visual studio无法查找每个类型以检查它是否与所需版本匹配 - 这就是项目需要直接引用的原因,这就是为什么。几乎所有 .net的DLL仅引用自己,不会因为额外的引用而烦扰您。
答案 1 :(得分:0)
因为编译器必须查看存储在其程序集中的类型信息,所以如果他找不到程序集,则抛出此错误。
如果引用了程序集,它将被复制到输出目录,编译器将能够找到它。此外,如果所需的程序集在GAC
中,编译器将找到它。
有时在ResolveAssemblyReference
之前运行的MSBuild
C# compiler
任务也会找到所需的程序集,您不必参考它。