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

Spo*_*ock 2 c# 32bit-64bit anycpu .net-4.5 visual-studio-2012

不确定之前有没有问过(我找不到).我有简单的控制台应用程序/ ESE,并具有以下设置.

在此输入图像描述

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

在此输入图像描述

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

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

Ice*_*ind 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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它只会报告PE32+您是将其编译为64位而不是Any CPU.原因是标头必须向后兼容.意味着如果程序集要在32位和64位的"任何CPU"中工作,那么标头格式必须采用32位操作系统可识别的格式.PE32+是一个64位唯一标头格式,如果该标头应用于编译为的程序集Any CPU,则32位操作系统将无法识别PE32+标头格式.