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

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

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

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

【问题讨论】:

标签: .net assemblies 64-bit 32bit-64bit anycpu


【解决方案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 中发生了变化。这是更新答案的链接:stackoverflow.com/a/12066861/1993242
  • 我想知道为什么我的 AnyCPU 没有在我的 PC 上以 64 位运行。原来我们现在有了首选 32 位标志。有关更多信息,请参阅上面的答案。
【解决方案2】:

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

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

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

【讨论】:

  • 作为这个答案的旁注,它只是二进制文件中的一个标志,您选择的选项不会改变其内容。它实际上可以在以后使用 CorFlags 工具进行修改。
猜你喜欢
  • 2011-11-11
  • 2018-08-04
  • 1970-01-01
  • 2021-06-25
  • 2013-04-15
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多