如果我要说的任何内容毫无意义或忽视了一些显而易见的东西,那么道歉 - 我对CLR内部的了解是不稳定的.
如果我理解正确,那么如果我只是在VS2K5中为'AnyCPU'构建一个解决方案(或者使用这些设置指向那个.sln文件的MSBuild),那么二进制文件只能编译到MSIL.然后,如果在32位平台上执行,它们会被JIT打成32位,如果在x64上执行,它们会被64位代码...对吧?
这些DLL用于Web应用程序并托管在W3WP.exe进程中.Process Explorer告诉我W3WP是一个64位进程.
但是当我使用Process Explorer在DLL视图中检查其中一个DLL的属性时,它会显示:'Image:32-bit'.是什么赋予了?
如果我对有问题的DLL运行corflags它会告诉我:ILONLY 1,32BIT 0但是PE PE32.我的理解是,这意味着它只是编译到IL,不是它不限于32位或64位,但我不完全清楚.PE32标志是否与它上面显示的32位有关?
您的问题与此问题有关.您在进程资源管理器中看到的是图像的类型,它与程序集的corflags中指定的"运行时兼容性"类型不同.
设置"Any Cpu"的目的是强制本机映像和程序集中最常见的分母,这样它就可以让.NET的Windows引导程序选择哪种运行时最适合当前平台.
因此,对于您的示例,您确实有32位图像(由PE标头指定),包含"任何CPU"程序集(由装配的CorFlags指定).