VS2012 编译为 x86,在 x64 操作系统中使用“任何 CPU”

本文关键字:任何 CPU 操作系统 编译 x86 x64 VS2012 | 更新日期: 2023-09-27 17:56:26

我有一个包含 C# 项目和 C DLL 的解决方案。解决方案设置为"混合平台",C# 项目设置为"任何 CPU"。

当 DLL 设置为针对 x64 进行编译时,我崩溃了。但是当 DLL 设置为针对 x86 进行编译时,一切正常。

操作系统是Windows7 x64。

Environment.Is64BitProcess无论我尝试哪种方法都会给出假。

我的理解是,默认情况下"任何CPU"都会编译为x64,因为操作系统是x64。显然,我错了。

谢谢你们。

VS2012 编译为 x86,在 x64 操作系统中使用“任何 CPU”

我的理解是"任何CPU"默认情况下都会编译为 x64

不,它会编译为"任何CPU"。它的运行方式取决于正在执行它的机器。因此,如果您在 64 位 CPU 上运行它,那么是的,它将以 64 位运行。但是,从崩溃来看,听起来您的 C dll 是 32 位的,或者您使用的是 32 位 API 调用。在这种情况下,您需要将其编译为 32 位。请注意,在VS2013中,"任何CPU"还有一个"首选32位"选项,除非32位不可用,否则它将以32位运行。大多数人都想关闭此功能;p

另请注意,如果这是一个(来自 dll 标记),它还取决于进程是 32 位还是 64 位。

首先,我们现在应该了解平台目标是什么:

anycpu(默认)编译程序集以在任何平台上运行。应用程序尽可能作为 64 位进程运行,并在只有该模式可用时回退到 32 位。

anycpu32bitpreferred编译程序集以在任何平台上运行。应用程序在同时支持 64 位和 32 位应用程序的系统上以 32 位模式运行。只能为面向 .NET Framework 4.5 的项目指定此选项。

ARM编译程序集以在具有高级 RISC 计算机 (ARM) 处理器的计算机上运行。

x64 编译程序集,使其由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行。

x86编译程序集,使其由 32 位、与 x86 兼容的公共语言运行库运行。 Itanium编译程序集,使其由具有Itanium处理器的计算机上的 64 位公共语言运行库运行。

因此anyCpu意味着运行 32 位和 64 位取决于您的 CPU。我认为您的dll是32位,因此您可以使用x86anycpu.