C#编译32/64位,还是任何cpu?

hel*_*922 68 .net 64-bit assemblies 32bit-64bit anycpu

可能重复:
Visual Studio"任何CPU"目标

我注意到在VS中编译C#代码时,通常有编译32/64位系统的选项,还有一个用于编译任何cpu的选项.

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

Jar*_*dek 181

32位机器上:

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

  • x86:与任何CPU相同.

  • x64:BadImageFormatException永远.

64位计算机上:

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

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

  • x64:与任何CPU相同.

这是JIT编译器生成的汇编代码就是基于这个标志所要求的目标一致.

  • 这是一个很好的答案,涵盖了所有的排列.只是添加[这个答案](http://stackoverflow.com/a/2418287/848344)将确定DLL /程序集是32位,64位还是"任何CPU". (5认同)
  • 看起来这在.NET 4.5中发生了变化.这是更新答案的链接:http://stackoverflow.com/a/12066861/1993242 (3认同)

Gil*_*lad 17

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

x64 - 您的软件将始终以64位模式运行,将在64位系统上运行,但不能在32位系统上运行.

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

  • 作为这个答案的旁注,它只是二进制中的一个标志,你选择的选项不会改变它的内容.实际上可以稍后使用CorFlags工具进行修改. (17认同)