2011-03-16 41 views
0

我有一個Visual Studio項目,其中包含許多商業DLL文件,這些文件在我的程序中使用。 我迄今爲止使用了許多這些DLL文件,沒有任何問題。我不得不使用另一個DLL文件。我將DLL文件作爲引用鏈接(像往常一樣),我可以看到它被添加到項目中,因爲代碼完成工作,我可以成功地構建項目。在模塊中發生.NET異常(TypeLoadException)

但是,當我在目標PC上運行這個,我得到一個TypeLoadException。

A .NET exception (TypeLoadException) occured in the module 

我試圖捕獲和打印異常中的確切信息,但我根本沒有幫助。

下面是完整的例外,我得到:

A .NET exception (TypeLoadException) occured in the module LightSwitch\nError message: Could not load type 'Backbone2.LightMode_Status_Ctr_1' from assembly 'Backbone2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.\nThrowing method: DiagModule.SetSwitch\n 

(我不能進行任何調試,並提供更多的信息,因爲我建我的項目作爲DLL,然後在目標計算機上使用,實際上我可以在PC上運行該程序,因爲它缺少所有必需的硬件)

+0

你能編輯你的問題並添加整個錯誤和異常信息嗎?另外,您可以通過此問題中的說明啓用其他程序集加載器日誌記錄:http://stackoverflow.com/questions/255669/how-to-enable-assembly-bind-failure-logging-fusion-in-net – 2011-03-16 05:50:21

回答

1

感謝所有的答覆,我設法找到了問題。 問題是該項目包含了不同文件夾中的不同版本的庫文件(dll)。在運行時(仍然不知道爲什麼)一個dll文件將被選中,並且由於文件在不同版本之間不同,所以缺少一些方法。因此,將DLL文件更新到所有文件夾中的相同版本解決了問題。

0

檢查DLL是否位於目標PC上的正確位置(或GAC中)。

+0

At這一點我已檢查參考/地點噸次。 – theAlse 2011-03-16 05:51:13

1

檢查該dll是否爲與您的pc相同的架構而構建。我的意思是,如果你的電腦是64位,請確保dll是相對應的,反之亦然

+0

或將主.exe文件標記爲「x86」而不是「AnyCPU」。這幾乎總是修復DLL架構不匹配。 – 2011-03-16 05:53:35

+0

這會導致'BadImageException'。 – jgauffin 2011-03-16 06:11:04

+0

如果main是「x86」,並且您加載的所有dll都是「x86」或「Any CPU」,則不會得到'BadImageException'。 – ToolmakerSteve 2014-04-28 06:03:22

0

啓動FusLogVw.exe - 它是.Net SDK的一部分,可以從VS 2010命令提示符啓動。配置日誌記錄以記錄所有故障。重現問題,刷新FusLogVw.exe窗口中的視圖。你應該能夠找到與你的問題相對應的記錄,它會告訴你它到底在做什麼,你應該能夠找出如何糾正問題。

+0

我編輯了我的文章,這根本就不是possibe,因爲我構建的dll只能在目標PC上運行。 – theAlse 2011-03-16 05:59:21

+0

您可以將FusLogVw.exe複製到目標PC並從那裏運行? – 2011-03-16 06:29:04

+0

在目標PC上安裝軟件有很多限制。 – theAlse 2011-03-16 06:31:32

0

檢查您是否引用DLL的一個版本,並在運行時加載另一個版本(來自GAC)。

+0

我該如何檢查?我可以看到,我使用的所有DLL文件(所有工作的和有問題的)都具有與運行時版本和版本相同的屬性。 – theAlse 2011-03-16 06:26:37