CorFlags 说我的 .NET 程序以 64 位运行,而 DumpBin 表示它是 32 位
CorFlags says my .NET-Program runs as 64bit while DumpBin means it is 32bit
我创建了一个项目并将其编译为Any CPU
。在 x64-Windows 上。由于我无法从我的代码中引用该程序集,因此我检查了 运行time 和 target-plattform:
如您所见,当 运行在 x64-OS(如我的)上时,目标平台是 x64。我还检查了 DumpBin
:
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
57A49000 time date stamp Fri Aug 05 15:09:20 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
102 characteristics
Executable
32 bit word machine
然而,当我 运行 CorFlags
它给我 x64 作为该程序集的平台时:
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
据我所知,当我选择 Any CPU
作为目标平台时,OS 将选择如何执行程序集。在 64 位系统上,它会 运行 在 64 位上,在 32 位上 OS 分别是 32 位。
所以我的问题是:我实际上目标是什么版本? 32 位还是 64 位?
这是完全正常的。 AnyCPU 意味着它可以在任何 cpu 上 运行,因此 header 中的 machine 字段不相关。必须选择 something,它只会选择 x86。使其与古老的 Windows 版本兼容,例如 Win98 和 Win2k。
special heroics 发生在 64 位操作系统上,OS 加载程序需要帮助从 32 位可执行文件创建 64 位进程,这需要修补内部加载程序结构。 mscoree.dll "loader-shim" 按照链接 post.
中的描述完成该工作
所以您不针对任何特定版本。果然是AnyCPU
我创建了一个项目并将其编译为Any CPU
。在 x64-Windows 上。由于我无法从我的代码中引用该程序集,因此我检查了 运行time 和 target-plattform:
如您所见,当 运行在 x64-OS(如我的)上时,目标平台是 x64。我还检查了 DumpBin
:
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
57A49000 time date stamp Fri Aug 05 15:09:20 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
102 characteristics
Executable
32 bit word machine
然而,当我 运行 CorFlags
它给我 x64 作为该程序集的平台时:
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
据我所知,当我选择 Any CPU
作为目标平台时,OS 将选择如何执行程序集。在 64 位系统上,它会 运行 在 64 位上,在 32 位上 OS 分别是 32 位。
所以我的问题是:我实际上目标是什么版本? 32 位还是 64 位?
这是完全正常的。 AnyCPU 意味着它可以在任何 cpu 上 运行,因此 header 中的 machine 字段不相关。必须选择 something,它只会选择 x86。使其与古老的 Windows 版本兼容,例如 Win98 和 Win2k。
special heroics 发生在 64 位操作系统上,OS 加载程序需要帮助从 32 位可执行文件创建 64 位进程,这需要修补内部加载程序结构。 mscoree.dll "loader-shim" 按照链接 post.
中的描述完成该工作所以您不针对任何特定版本。果然是AnyCPU