C# 输入Foo不在引用的程序集中,但输入I';m使用扩展类型Foo的类型栏

C# 输入Foo不在引用的程序集中,但输入I';m使用扩展类型Foo的类型栏,c#,.net,entity-framework,C#,.net,Entity Framework,以下代码行产生错误: 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中从未见过这种错误为什么编译器找不到依赖项引用的程序集中定义的类型?

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

想想看:

您已经创建了一个完美的漂亮DLLa,它可以与COM端口一起工作。然而,它引用了某种
System.IO.Comports.dll
库来精确地工作

然后,有人想使用你的A库并引用它。他怎么知道
System.IO.Comports.dll
库存在于项目或bin文件夹或system32目录中?或者去哪里找?“某人”正在开发的EXE项目没有直接引用

直接引用总是复制到输出目录,除了预安装的引用(如.NET Framework),以确保可执行文件能够找到它们

类型“System.Data.Entity.DbContext”是在未引用的程序集中定义的


此类型可能在具有多个版本的多个库中定义,visual studio无法查找每个库以检查其是否与所需的版本匹配-这就是项目需要直接引用的原因,也是几乎所有的都需要直接引用的原因。net的DLL只引用它们自己,而不必麻烦您附加引用。

因为编译器必须查看存储在其程序集中的类型信息,如果他找不到程序集,将抛出此错误

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


有时在
C#编译器
之前运行的
ResolveAssemblyReference
MSBuild
任务也会找到所需的程序集,您不必引用它,依赖项引用了通过NuGet安装的Entity Framework的一个版本。我的建议是在抛出错误的项目中也引用NuGet的Entity Framework。向我的解决方案中的每个项目添加对正确的Entity Framework DLL的引用是否是消除此错误的正确方法?@hidarikani您的解决方案是添加通过Nuget manager对解决方案中使用
MyContext
类的任何项目进行正确的实体框架引用。