我创建了一个项目并将其编译为Any CPU
。在x64-Windows上。由于我无法从我的代码中引用该程序集,因此我检查了运行时和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
作为目标平台时,操作系统将选择如何执行程序集。在64位系统上,它将以64位运行,在32位操作系统上以32位运行。
所以我的问题是:我实际目标的版本是什么? 32或64位?
答案 0 :(得分:0)
这完全正常。 AnyCPU意味着它可以在任何cpu上运行,因此标头中的 machine 字段不相关。必须选择某些东西,它只需选择x86。使其与Win98和Win2k等古老的Windows版本兼容。
special heroics发生在64位操作系统上,OS加载程序需要帮助从32位可执行文件创建64位进程,这需要修补内部加载器结构。 mscoree.dll“loader-shim”按照链接帖子的描述完成了这项工作。
所以你不定位任何特定版本。它确实是AnyCPU。