不确定之前是否有人问过这个(我找不到任何人)。
我有简单的控制台应用程序/ 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+
标头格式。