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