不确定之前有人问过这个问题(我找不到)。 我有简单的控制台应用程序/ESE 并具有以下设置。
我运行的是 Windows 8 63 位操作系统。和 EXE 目标框架 .NET 4.5 但是,当我编译这个 EXE 时,它仍然显示为 32 位 EXE。
因为这是“任何 CPU”,我希望 EXE 编译为 64 位/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 位而不是 Any CPU
,它只会报告 PE32+
。原因是因为 header 必须向后兼容。这意味着如果程序集要在“任何 CPU”(32 位和 64 位)中工作,则 header 格式必须采用 32 位操作系统可识别的格式。 PE32+
是一种仅限 64 位的 header 格式,如果该 header 应用于编译为 Any CPU
的程序集,则 32 位操作系统将无法识别 PE32+
header 格式。
关于c# - 构建平台目标 AnyCPU EXE 在 64 位机器中仍然显示 32 位 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830701/