2

以下代码行产生错误:

private MyContext context;

错误:

The type 'System.Data.Entity.DbContext' is defined in an assembly that is not referenced.

MyContext扩展 DbContext 并MyContext在引用的程序集中定义。我在 Java 中从未见过这种错误。为什么编译器找不到依赖项引用的程序集中定义的类型?

4

2 回答 2

1

因为该程序集可能不存在。

想一想:

您已经创建了一个完美的 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 仅引用它们自己,以免因额外的引用而打扰您。

于 2013-10-10T07:06:13.897 回答
0

因为编译器必须查看存储在其程序集中的类型信息,所以如果他无法定位程序集,则会引发此错误。

如果程序集被引用,它将被复制到输出目录,编译器将能够找到它。此外,如果需要的程序集在GAC编译器中,编译器会找到它。

有时ResolveAssemblyReference MSBuild,在 之前运行的任务C# compiler也会找到所需的程序集,您不必引用它。

于 2013-10-10T07:06:13.900 回答