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



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



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

能否请您告诉我为什么它仍然是32位?

最佳答案

您认为我误解了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。原因是因为标头必须向后兼容。这意味着,如果程序集要在“任何CPU”(32位和64位)中工作,则标头格式必须采用32位操作系统可以识别的格式。 PE32+是仅64位标头格式,并且如果该标头应用于编译为Any CPU的程序集,则32位操作系统将无法识别PE32+标头格式。

10-01 10:55