我想澄清一些事情.
运行.NET控制台应用程序时,mscorlib.dll/mscoree.dll是否会在进程的虚拟地址空间中加载?
mscorlib.dll和mscoree.dll(CLR)不是托管dll.那是对的吗?
另外,了解.NET程序如何执行的更好资源是什么?
Han*_*ant 27
是.您将始终加载mscoree.dll,这是默认CLR主机的引导程序.它是一个非托管DLL.每个.NET程序集都包含一些本机代码,只是跳转到该DLL.然而它确实被最近的Windows版本直接加载,OS加载器内置了.NET感知.打开非托管调试选项Project + Properties,Debug选项卡时,可以在Debug + Modules窗口中看到它.然后,您还将看到mscorjit.dll,mscorwks.dll和msvcr80.dll,以及运行托管代码所需的其他三个本机代码块.分别是即时编译器,CLR和C运行时支持库.它们在.NET 4中具有不同的DLL名称.
从技术上讲,可能无法加载mscorlib.dll,编译器具有/ nostdlib选项以避免对该程序集的引用.实际上,只有在提供替代品时才有效,例如Silverlight的编译方式.它是一个带有一些本机代码但主要是托管代码的混合模式程序集.因此,64位框架有一个单独的版本.你还会看到mscorlib.ni.dll启用了非托管调试,这是程序集的ngen-ed版本.