构建平台目标AnyCPU EXE仍然在64位机器中显示32位标头

时间:2015-01-07 23:44:09

标签: c# visual-studio-2012 .net-4.5 32bit-64bit anycpu

以前不确定是否曾经问过这个问题(我找不到)。 我有简单的控制台应用程序/ ESE,并具有以下设置。

enter image description here

我正在运行Windows 8,63位操作系统。和EXE目标框架.NET 4.5 但是,当我编译这个EXE时,它仍然显示为32位EXE。

enter image description here

由于这是“任何CPU”,我希望EXE编译为64bit / PE32 +。

有些人可以帮忙说明为什么这仍然是32位吗?

2 个答案:

答案 0 :(得分:7)

我认为你错误解释CorFlags。这是一个CorFlags真值表:

CPU Architecture           PE      32BITREQ   32BITPREF
------------------------   -----   --------   ---------
x86 (32-bit)               PE32           1           0
x64 (64-bit)               PE32+          0           0
Any CPU                    PE32           0           0
Any CPU 32-Bit Preferred   PE32           0           1

如您所见,如果您将其编译为64位而不是PE32+,则只会报告Any CPU。原因是标头必须向后兼容。意味着如果程序集要在32位和64位的“任何CPU”中工作,那么标头格式必须采用32位操作系统可识别的格式。 PE32+是仅64位标头格式,如果该标头应用于编译为Any CPU的程序集,则32位操作系统将无法识别PE32+标头格式。< / p>

答案 1 :(得分:2)

exe文件不包含任何32位或64位代码,只包含IL代码。

JIT编译器从IL代码创建机器代码,平台目标确定允许JIT编译器创建哪种机器代码。