不确定以前是否有人问过这个问题(我找不到)。我有简单的控制台应用程序/ESE 并具有以下设置。
我正在运行 Windows 8、63 位操作系统。和 EXE 目标框架 .NET 4.5 但是,当我编译这个 EXE 时,它仍然显示为 32 位 EXE。
由于这是“任何 CPU”,我希望 EXE 编译为 64 位/PE32+。
有人可以帮忙说明为什么这仍然是32位吗?
不确定以前是否有人问过这个问题(我找不到)。我有简单的控制台应用程序/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
如您所见,仅PE32+
当您将其编译为 64 位而不是Any CPU
. 原因是标头必须向后兼容。这意味着如果程序集要在 32 位和 64 位的“任何 CPU”中工作,则标头格式必须采用 32 位操作系统可识别的格式。PE32+
是仅 64 位的标头格式,如果该标头应用于编译为 的程序集Any CPU
,则 32 位操作系统将无法识别PE32+
标头格式。
exe 文件不包含任何 32 位或 64 位代码,它仅包含 IL 代码。
JIT 编译器从 IL 代码创建机器代码,平台目标确定允许 JIT 编译器创建什么样的机器代码。