亲爱的互联网社区。第三方库需要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