这个问题与SO上的这些先前问题有关:Any CPU question 1和Any CPU Question 2。
我有一个应用程序,最初是在Win XP上使用Visual Studio 2005构建的(别笑!)。该应用程序调用我们的win32 C ++ dll。调用C ++ dll的C#组件使用“Any CPU”配置构建,并且在Win XP上正常工作。
我们现在正在转移到Win 7,并且使用VC 2005在Win XP上构建的发布版本的应用程序可以正常工作。但是,随着我们向用户推出win 7,我们已经利用了机会使用VS 2010,并且我已经在win 7上使用VC 2010构建了C#组件,但现在运行此版本时,我获得了许多“无法加载abc.dll”其中abc.dll是我们的win32 c ++组件。
我知道使用x86配置重新编译C#程序集将解决问题,但我不明白的是,使用Win-XP / Visual studio 2005(Any CPU配置)构建的C#程序集如何在Win 7上运行而没有任何问题?毕竟,当在Win 7中加载它们并调用Win32 C ++ dll时,使用“Any CPU”的这些C#程序集应该JIT到64位代码并导致BadImageFormatException或其他错误。
更新:我有一些在下面的评论中请求的更多信息。
我有一个应用程序,最初是在Win XP上使用Visual Studio 2005构建的(别笑!)。该应用程序调用我们的win32 C ++ dll。调用C ++ dll的C#组件使用“Any CPU”配置构建,并且在Win XP上正常工作。
我们现在正在转移到Win 7,并且使用VC 2005在Win XP上构建的发布版本的应用程序可以正常工作。但是,随着我们向用户推出win 7,我们已经利用了机会使用VS 2010,并且我已经在win 7上使用VC 2010构建了C#组件,但现在运行此版本时,我获得了许多“无法加载abc.dll”其中abc.dll是我们的win32 c ++组件。
我知道使用x86配置重新编译C#程序集将解决问题,但我不明白的是,使用Win-XP / Visual studio 2005(Any CPU配置)构建的C#程序集如何在Win 7上运行而没有任何问题?毕竟,当在Win 7中加载它们并调用Win32 C ++ dll时,使用“Any CPU”的这些C#程序集应该JIT到64位代码并导致BadImageFormatException或其他错误。
更新:我有一些在下面的评论中请求的更多信息。
- 在我的Windows 7框上,右键单击我的电脑,查看属性。系统信息显示“系统类型:64位操作系统”,证实这是Win64 OS。
- 在Windows XP上使用VC2005打开解决方案时,在查看解决方案的配置管理器时,我可以确认所有C#项目都是平台类型“Any CPU”。
在64位Win 7机器上运行发布版本(该版本是使用VC2005 / win xp制作的)时,任务管理器显示图像名称为“ Test.exe *32”,这证实它已经被jit编译并加载到32位进程中。