c# - 构建平台目标 AnyCPU EXE 在 64 位机器中仍然显示 32 位 header

标签 c# visual-studio-2012 .net-4.5 32bit-64bit anycpu

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

enter image description here

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

enter image description here

因为这是“任何 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/

相关文章:

c# - 是否有类似 .NET 字典的重复键来填充文本文件?

c# - .NET 垃圾收集器是否执行代码的预测分析?

c# - 默认 ASP.NET 应用程序中存储的用户名和密码在哪里?

c++ - 找不到用于 DirectX 编程的 d3dcompiler_43.dll

security - 据称,在 .NET 4.5 中实现 IDisposable 的 X509Store 在哪里?

c# - 使用 Entity Framework 按类型加载数据

c# - 将字节数组转换为字符串然后用正则表达式解析是个坏主意吗?

c# - 当我使用 x :bind in uwp: invalid binding path err 时出错

c++ Opencv accumulateWeighted - 奇怪的行为

c# - 使用 Linq 获取 List<string> 集合中的子字符串