2010-06-22 142 views
0

我有一個龐大而臃腫的軟件,我想爲它添加一個新的GUI元素。 GUI元素是使用XAML和WPF編寫的。我在一個單獨的程序集中創建了UI元素,並在大型軟件中引用它。這兩個項目在VS2010下順利編譯,但是當我運行我的應用程序時,我得到一個TypeLoadException什麼樣的問題會導致TypeLoadException?

用調試器查看異常,我得到以下消息:Could not load type GUI.Dashboard from assembly GUI, blah, blah。沒有InnerException也沒有進一步的細節。

.GNU文檔說,當沒有消息傳遞給異常的構造函數時會顯示此消息。我認爲這個例外的製作者本身並不知道它是如何發生的。

我嘗試使用工具Fuslogvw.exe,它有效地顯示了一些不相關的小缺失依賴關係。但是,它無法找到關於這個例外的任何信息。

什麼樣的問題可能會拋出像這樣的不精確的異常?有沒有辦法讓Fuslogvw.exe知道它獲得一些細節?

謝謝你在前進,

編輯: 我有效編譯我的調試符號的應用程序。當我嘗試實例化包含對有問題符號的引用的類時,會發生異常。即:

class SomeClass 
{ 
    GUI.Dashboard dashboard; 
} 

和呼叫跟蹤看起來魔神此:

at SomeClass..ctor() 
at MainClass.Main() din MainClass.cs:line 42 
+0

如果您使用調試符號進行編譯,您應該檢查異常的堆棧跟蹤。它應該指出你的問題。 – Reddog 2010-06-22 15:37:51

+0

是的,我得到了異常的堆棧跟蹤,但它不是很有幫助。因此我編輯了這篇文章。 – slaphappy 2010-06-22 15:47:46

+1

有沒有可能會發生程序集名稱衝突?或者GAC中有相同名稱的組件的舊版本,或者某處? – 2010-06-22 16:52:07

回答

-2

我終於找到了原因這個錯誤:很顯然,在某些情況下,引用.exe文件無法正常工作。一些方法和類加載好但有些失敗。在另一個項目中,引用此.exe文件不會引起任何問題。

切換到.dll格式解決了所有鏈接問題。我認爲這是CLR中的一個錯誤。

0

可能的問題包括:

  1. 您引用的組件只支持x64和你的消費者是x86或AnyCPU上32位CLR
  2. 您的消費者組裝是針對不同版本的引用程序集編譯的

您可以嘗試使用use FusLogVW來打開程序集綁定日誌記錄,並檢查日誌文件以獲取有關失敗的更多信息。

+0

我仔細檢查了配置,這兩個項目都針對AnyCPU。此外,正如我在我的文章中所做的那樣,我使用'Fuslogvw.exe'來獲取有關此錯誤的詳細信息,但它甚至沒有顯示它,儘管它列出了應用程序加載的所有其他程序集(成功和失敗的程序集) – slaphappy 2010-06-22 15:58:19

0

公共語言運行時找不到程序集,程序集中的類型或無法裝入類型時,會引發TypeLoadException。

TypeLoadException使用HRESULT COR_E_TYPELOAD,其值爲0x80131522。

有關TypeLoadException實例的初始屬性值列表,請參閱TypeLoadException構造函數。

來源:MSDN

0

只是爲了另一個答案添加到此:

我們有一個C++客戶端調用.NET COM DLL。

.NET dll的開發人員重命名了包含C#類的名稱空間,儘管progid在類屬性和C++調用代碼中保持不變,但運行時無法加載導致此錯誤的對象。

相關問題