x64.NET编译/Process Explorer奇怪之处

x64.NET编译/Process Explorer奇怪之处,.net,clr,64-bit,process-explorer,corflags,.net,Clr,64 Bit,Process Explorer,Corflags,如果我将要说的任何话没有意义或忽略了一些显而易见的事情,我深表歉意-我对CLR内部的了解不多 如果我理解正确,那么如果我只是在VS2K5中为“AnyCPU”构建一个解决方案(或者使用这些设置将MSBuild指向该.sln文件),那么二进制文件只能编译到MSIL。然后,如果在32位平台上执行,它们会被JITted为32位;如果在x64上执行,它们会被JITted为64位……对吗 DLL用于web应用程序并托管在W3WP.exe进程中。Process Explorer告诉我W3WP是一个64位进程

如果我将要说的任何话没有意义或忽略了一些显而易见的事情,我深表歉意-我对CLR内部的了解不多

如果我理解正确,那么如果我只是在VS2K5中为“AnyCPU”构建一个解决方案(或者使用这些设置将MSBuild指向该.sln文件),那么二进制文件只能编译到MSIL。然后,如果在32位平台上执行,它们会被JITted为32位;如果在x64上执行,它们会被JITted为64位……对吗

DLL用于web应用程序并托管在W3WP.exe进程中。Process Explorer告诉我W3WP是一个64位进程

但是,当我使用Process Explorer在DLL视图中检查其中一个DLL的属性时,它会显示:“Image:32位”。有什么好处

如果我对有问题的dll运行corflags,它会告诉我:我只有132位0,但PE PE32。我的理解是,这意味着是的,它只编译到IL,不,它不限于32位或64位,但我不完全清楚。PE32标志是否与上面显示为32位有关

然后,如果在32位平台上执行,它们会被JITted为32位;如果在x64上执行,它们会被JITted为64位……对吗

对,您可以通过执行为任何CPU编译的相同exe进行检查:

sizeof(IntPtr)==4//32位为真

sizeof(IntPtr)=8//64位为真


但是,如果您的程序集仅在为32位平台编译的进程中被引用,它将被JIT为32位(在WOW中运行64位Windows)。

您的问题与此相关。您在process explorer中看到的是映像的类型,它不同于程序集中指定的“运行时兼容性”类型

设置“任意Cpu”的目的是强制使用本机映像和程序集中最常见的分母,以便windows bootstrapper for.NET选择最适合当前平台的运行时

因此,在您的示例中,您确实有一个32位的映像(由PE头指定),其中包含一个“任意CPU”程序集(由程序集的CorFlags指定)。

谢谢:)知道Process Explorer为何如此恶作剧吗?