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。显然,我错了。
谢谢你们。
我的理解是"任何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位,因此您可以使用x86
或anycpu
.