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 位进程运行,可以加载 任何 CPU 和 x86 程序集,将获得 @987654323 @ 如果它尝试加载 x64 程序集。
x86:与任何 CPU 相同。
x64:BadImageFormatException
始终。
在 64 位 机器上:
任何 CPU:作为 64 位进程运行,可以加载 任何 CPU 和 x64 程序集,将获得 @987654325 @ 如果它尝试加载 x86 程序集。
x86:作为 32 位进程运行,可以加载 任何 CPU 和 x86 程序集,将获得 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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章