親愛的互聯網社區。第三方庫需要32位應用程序?
我正在研究一個客戶在遷移到基於64位的Windows 7客戶機時遇到問題。他們的一個程序依賴於第三方庫,如果當前的應用程序不是32位的,那麼這個庫就會大驚小怪。
MyClientApplication調用MyThirdPartyLibrary0.dll,後者又調用MyThirdPartyLibrary1.dll。在32位環境中,我通常會這樣做:
var myObject = New MyThirdPartyLibrary0.MyClass(); myObject.MyMethod();
而且一切都很好。
在64位環境中,我得到以下異常:
System.BadImageFormatException: Could not load file or assembly 'MyThirdPartyLibrary1.dll' or one of its dependencies. is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
File name: 'MyThirdPartyLibrary1.dll'
at MyThirdPartyLibrary1.MyInnerClass.MyMethod()
at MyThirdPartyLibrary0.MyClass.MyMethod()
at MyApplication.Program.Main(String[] args)
在我開發的客戶我運行在NUnit測試相同的代碼,它產生相同BadImageFormatException;如果我使用Microsoft.VisualStudio.QualityTools.UnitTestFramework運行它,那麼它運行正常。我認爲這是因爲VS 2010是一個32位應用程序?
我注意到,使用Microsoft.VisualStudio.QualityTools.UnitTestFramework時如果切換到使用Patform = 64位I不能運行測試 - 它出現這些測試不能在這些條件下運行。
我一直無法「強制」MyApplication成功執行MyMethod。我懷疑這裏的根本原因是MyThirdPartyLibrary1.dll無法在64位應用程序上下文中運行,但我無法找到一種方式來「強制」它在32位上下文中運行:在Platform = Any CPU之間交換,x86和64位都會產生相同的BadImageFormatException,就像玩兼容性設置一樣。此外,「疑難解答兼容性」選項建議在Windows XP(SP 2)模式下運行應用程序:結果相同。
在我看來,我需要找到一種方法來編譯MyApplication作爲一個真正的32位應用程序或東西,但我似乎無法弄清楚如何做到這一點。
任何幫助,將理解的是, KS
謝謝你的回覆。關於NUnit賽跑者;我很懷疑。如果第三方供應商無法提供64位版本,我想我會查看32位包裝(嘆氣!)。 – 2012-03-06 08:51:55