我创建了一个项目并将其编译为Any CPU。在x64-Windows上。由于我很难从代码中引用该程序集,所以我检查了运行时和目标平台:

如您所见,在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位?
发布于 2016-08-05 13:47:01
这完全是正常的。AnyCPU意味着它可以在任何cpu上运行,因此报头中的机器字段不相关。必须选择一些东西,它只是选择x86。使其与Win98和Win2k等古老的Windows版本兼容。
special heroics发生在64位操作系统上,操作系统加载程序需要帮助从32位可执行文件创建64位进程,这需要修补内部加载程序结构。mscoree.dll“装入器-shim”完成了链接文章中描述的工作。
因此,您不针对任何特定版本。它确实是AnyCPU。
https://stackoverflow.com/questions/38790620
复制相似问题