2011-04-17 113 views
22

我越來越對我引用的程序之一以下錯誤:如何在.NET中調試System.TypeLoadException錯誤?

Could not load type 'System.Func`2' from assembly 'MyAssembly, ...

我會說實話,我不認爲我能記得上一次我看到一個System.TypeLoadException錯誤,或者如果我看到它,解決方案是顯而易見的。我的第一反應是看看有什麼MSDN had to say about it

TypeLoadException拋出時 公共語言運行時無法找到 裝配,裝配 中的類型,或者無法加載類型。

也許我在讀這個錯誤,但它是說,CLR根本找不到該類型?這可能會更有意義,如果這不是在mscorlib中的東西。這些都是使用VS2010搭建的.NET4,所以沒有單聲道或其他奇怪的庫問題。我在想這個嗎?這是怎麼回事?

+1

你確定你引用的程序集也是爲.NET 4編譯的嗎? – Gabe 2011-04-17 03:16:54

+0

好趕上我的男人!出於某種原因,構建過程在引用程序集上回到了v2。現在我需要弄清楚爲什麼這些程序集是在v2上構建的,但他們之前一直在正常工作。哦,我的上帝,我花了這麼多時間。如果你想回答這個問題,我會給你最好的答案。 – kertosis 2011-04-17 03:38:17

+0

另請參見[在Visual Studio單元測試中可能導致System.TypeLoadException?](http://stackoverflow.com/q/5735673) – 2016-06-03 03:42:42

回答

22

更多詳細信息問題是您的版本不匹配。確保你的所有程序集都是爲.NET 4編譯的。

12

我不確定您的具體情況,但Assembly Binding Log Viewer(fuslogvw)通常對調試類型加載問題非常有幫助。在http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

+0

對不起,關於1.1鏈接。我的錯。但是,如何在調試類型加載異常時融合日誌不相關? – Ragesh 2011-04-17 07:37:02

+2

爲了將來的參考,您可以通過簡單地刪除最後的括號來使鏈接自動轉到最新版本。所以,而不是:http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.71).aspx,你會有這樣的:http://msdn.microsoft.com/en-us /library/e74a18c4.aspx – 2011-04-17 07:54:35

+0

刪除downvote。我把TypeLoadException和TypeInitializationException混淆了。 – 2011-04-17 21:56:43

21

重構後我收到了這個錯誤。我有兩個項目編譯爲具有相同名稱的DLL。

檢查項目屬性「應用程序」部分中的「程序集名稱」。

+1

我爲我的單元測試製作了一個與原始解決方案同名的獨立項目,oops。 – andy 2016-05-26 08:34:49

+1

許多年過去了,經過幾個小時的調查,這只是保存了我的培根 – 2017-02-09 19:31:27

1

我在清理工作中將一個類從一個項目移到另一個項目時出現此錯誤。查看所有其他可能的原因後,重新加載我的解決方案中的每個項目,並且一切正常。

  1. 鼠標右鍵單擊在解決方案資源管理器中的項目名稱
  2. 選擇卸載項目
  3. 鼠標右鍵單擊在解決方案資源管理器中的項目名稱
  4. 選擇刷新項目
3

你也可能得到這個如果您更改要加載的程序集,但在GAC中仍舊有舊版本。它會嘗試加載GAC版本,而不是您在VS項目中引用的內容。

0

當我重構將某些類移動到它們自己的庫中時,我遇到了這個異常,並且引用了它試圖在新庫中加載的庫的不同版本(通過NuGet獲取),而不是我在原始項目中使用的版本。

修復它是在舊項目中打開NuGet Manager並更新相應的軟件包與我在新庫中使用的版本相同的事情。