C# 编译为 32/64 位,或任何 cpu? [复制]

Posted

技术标签:

【中文标题】C# 编译为 32/64 位,或任何 cpu? [复制]【英文标题】:C# compiling for 32/64 bit, or for any cpu? [duplicate] 【发布时间】:2011-07-10 22:17:05 【问题描述】:

可能重复:Visual Studio “Any CPU” target

我注意到在 VS 中编译 C# 代码时,通常有针对 32/64 位系统进行编译的选项,也有针对任何 cpu 进行编译的选项。

这两个选项有什么区别?选择任何 CPU 是否只编译为中间字节码,而第一个选项编译为机器码(这听起来不太可能)?还是别的什么?

【问题讨论】:

另见:Visual Studio “Any CPU” target 【参考方案1】:

32 位 机器上:

任何 CPU:作为 32 位进程运行,可以加载 任何 CPUx86 程序集,将获得 @987654323 @ 如果它尝试加载 x64 程序集。

x86:与任何 CPU 相同。

x64BadImageFormatException 始终。

64 位 机器上:

任何 CPU:作为 64 位进程运行,可以加载 任何 CPUx64 程序集,将获得 @987654325 @ 如果它尝试加载 x86 程序集。

x86:作为 32 位进程运行,可以加载 任何 CPUx86 程序集,将获得 BadImageFormatException如果它尝试加载 x64 程序集。

x64:与任何 CPU 相同。

JIT 编译器根据此标志生成与请求的目标兼容的汇编代码。

【讨论】:

这是一个涵盖所有排列的好答案。只是补充一点,this answer 将确定 DLL/程序集是 32 位、64 位还是“任何 CPU”。 看起来这在 .NET 4.5 中发生了变化。这是更新答案的链接:***.com/a/12066861/1993242 我想知道为什么我的 AnyCPU 没有在我的 PC 上以 64 位运行。原来我们现在有了首选 32 位标志。有关更多信息,请参阅上面的答案。【参考方案2】:

x86 - 您的软件将始终在 32 位模式下运行,无论是在 32 位系统还是 64 位系统上。

x64 - 您的软件将始终在 64 位模式下运行,将在 64 位系统上运行,但不会在 32 位系统上运行。

任何 CPU - 您的软件将根据您的操作系统运行。如果您有 32 位操作系统,您的代码将在 32 位模式下运行,如果您有 64 位操作系统,您的代码将在 64 位模式下运行。

【讨论】:

作为这个答案的旁注,它只是二进制文件中的一个标志,您选择的选项不会改变其内容。它实际上可以在以后使用 CorFlags 工具进行修改。

以上是关于C# 编译为 32/64 位,或任何 cpu? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#编译过程

将现有 C# 代码编译为 WebAssembly

16位/32位/64位CPU的位究竟是说啥

C# - 使用自定义配置在运行时编译 c# 代码

Xcode 仅针对 Intel 32-64bit 编译

用于 C++ 的 C# 包装器,但仅编译为静态库