2013-10-10 52 views
2

下面的代碼行產生一個錯誤類型欄:Foo類型不是在引用的組件,但我使用延伸Foo類型

private MyContext context; 

錯誤:

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

MyContext延伸的DbContext和MyContext在引用的程序集中定義。我從來沒有見過Java中的這種errod。 爲什麼編譯器找不到在依賴項引用的程序集中定義的類型?

+0

順便說一下,依賴項引用通過NuGet安裝的實體框架版本 – hidarikani

+0

我的建議是從NuGet引用實體框架以及引發錯誤的項目。 – argaz

回答

1

因爲該程序集可能不存在。

它想:

您已經創建了一個完美漂亮的DLL 一個與COM端口工作正常。但是,它引用某種System.IO.Comports.dll庫來按預期工作。

然後,有人想使用您的A庫並引用它。他應該如何知道System.IO.Comports.dll庫存在於項目或bin文件夾或system32目錄中?或者在哪裏尋找它?沒有直接「有人」正在開發的EXE項目的參考。

直接引用總是被複制到輸出目錄,除了預安裝的 - 比如.NET Framework的 - 要確保可執行文件能夠找到它們。

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

這種類型可能在多個版本的多個磁帶庫來界定,有沒有辦法,Visual Studio將尋找他們每個人的檢查,如果它需要的版本匹配 - 這就是爲什麼這個項目需要有直接參考,這就是爲什麼幾乎所有。NET的DLL只引用自己不要打擾你額外的引用。

+0

是否在我的解決方案中爲每個項目添加了對正確實體框架DLL的引用,以使此錯誤消失的正確方法? – hidarikani

+0

@hidarikani您的解決方案是通過Nuget管理器將正確的實體框架引用添加到您的解決方案**中的任何項目,該項目使用**'MyContext'類。 – AgentFire

0

因爲編譯器必須查看存儲在其程序集中的類型信息,所以如果他找不到程序集,則會引發此錯誤。

如果彙編被引用,它將被複制到輸出目錄,編譯器將能夠找到它。另外,如果所需的程序集位於GAC中,編譯器將找到它。

有時在C# compiler之前運行的ResolveAssemblyReferenceMSBuild任務也將找到所需的程序集,您將不必引用它。

相關問題