C#编译为32/64位,或任何CPU?

可能重复:
Visual Studio“任何CPU”的目标

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

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

32位机器上:

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

  • x86 :与任何CPU相同。

  • x64BadImageFormatException总是。

64位机器上:

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

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

  • x64 :与任何CPU相同。

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

x86 – 在32位系统和64位系统上,您的软件将始终以32位模式运行。

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

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