![](/img/trans.png)
[英]Will dll be loaded as 32bit or 64bit when exe is x86(32bit) on a 64bit machine?
[英]Build platform target AnyCPU EXE still shows 32bit header in 64bit machine
不確定之前有沒有問過(我找不到)。 我有簡單的控制台應用程序/ ESE,並具有以下設置。
我正在運行Windows 8,63bit操作系統。 和EXE目標框架.NET 4.5但是,當我編譯這個EXE時,它仍然顯示為32位EXE。
由於這是“任何CPU”,我希望EXE編譯為64bit / 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+
。 原因是標頭必須向后兼容。 意味着如果程序集要在32位和64位的“任何CPU”中工作,那么標頭格式必須采用32位操作系統可識別的格式。 PE32+
是一種僅64位的頭格式,如果該頭應用於編譯為Any CPU
的程序集,則32位操作系統將無法識別PE32+
頭格式。
exe文件不包含任何32位或64位代碼,它只包含IL代碼。
JIT編譯器從IL代碼創建機器代碼,平台目標確定允許JIT編譯器創建哪種機器代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.