C# 无法在XP 64位上加载程序集

C# 无法在XP 64位上加载程序集,c#,.net,64-bit,32-bit,C#,.net,64 Bit,32 Bit,我使用任何CPU选项编译了一个.NET应用程序。.NET应用程序使用了一个封装C++调用的非托管DLL(托管包装)。此.NET包装器驻留在GAC中 当我运行.NET应用程序时,它在XP 32位上运行良好。但当我在XP 64位上运行它时,它失败并给出以下异常: 无法加载文件或程序集“Dll名称、版本、区域性=中性、PublicKeyToken”或其依赖项之一 如何解决此问题?您需要使用x86 CPU选项。如果您知道其中一个非托管依赖项是32位的,那么您需要为CPU构建具有x86选项的解决方案。这确

我使用
任何CPU
选项编译了一个.NET应用程序。.NET应用程序使用了一个封装C++调用的非托管DLL(托管包装)。此.NET包装器驻留在GAC中

当我运行.NET应用程序时,它在XP 32位上运行良好。但当我在XP 64位上运行它时,它失败并给出以下异常:

无法加载文件或程序集“Dll名称、版本、区域性=中性、PublicKeyToken”或其依赖项之一


如何解决此问题?

您需要使用x86 CPU选项。如果您知道其中一个非托管依赖项是32位的,那么您需要为CPU构建具有x86选项的解决方案。这确保即使在64位操作系统上,应用程序也将在32位进程中运行


这是必需的,因为无法将32位编译代码加载到64位进程中。

您可以在上找到一些解释。

您需要确保您的非托管dll也支持64位并且在搜索路径中。

是否有CPU选项不足以满足此要求?不,不会。“任意CPU”选项允许构建一个将在32到64位上运行的程序集。在64位操作系统上运行时,.NET将启动64位进程并使用64位版本的JIT编译器。因此,当该代码随后试图加载一个32位的dll时,会出现一个错误。您必须通过指定x86明确指出.NET只应在32位进程中运行代码,而不管其运行在哪个操作系统上。