C# .NET应用程序运行时是否加载了mscorlib.dll/mscoree.dll
我正试图澄清一些事情C# .NET应用程序运行时是否加载了mscorlib.dll/mscoree.dll,c#,C#,我正试图澄清一些事情 运行.NET控制台应用程序时,是否会在进程的虚拟地址空间中加载mscorlib.dll/mscoree.dll mscorlib.dll和mscoree.dll(CLR)不是受管dll。对吗 另外,了解.NET程序是如何执行的,什么是一个很好的资源?我建议阅读Jefrey Richter的书。它非常清楚地解释了引擎盖下发生的事情:) 另外,您可能会发现这个问题很有帮助:.Net可执行文件与任何其他PE文件没有什么不同。因此,与本机可执行文件中导入的所有dll一样,mscor
另外,了解.NET程序是如何执行的,什么是一个很好的资源?我建议阅读Jefrey Richter的书。它非常清楚地解释了引擎盖下发生的事情:)
另外,您可能会发现这个问题很有帮助:.Net可执行文件与任何其他PE文件没有什么不同。因此,与本机可执行文件中导入的所有dll一样,mscorlib.dll加载到.net可执行文件的进程虚拟空间中。
如果您感兴趣,可以阅读有关PE文件格式的内容是。您将始终加载mscoree.dll,这是默认CLR主机的引导程序。它是一个非托管DLL。每个.NET程序集都包含少量本机代码,只需跳转到该DLL即可。不过,它确实是由最新的Windows版本直接加载的,操作系统加载器内置了.NET感知功能。打开“非托管调试”选项“项目+属性”的“调试”选项卡时,可以在“调试+模块”窗口中看到它。然后还将看到mscorjit.dll、mscorwks.dll和msvcr80.dll,这是运行托管代码所需的其他三块本机代码。分别是即时编译器、CLR和C运行时支持库。它们在.NET4中有不同的DLL名称 从技术上讲,不加载mscorlib.dll是可能的,编译器具有/nostlib选项以避免引用该程序集。实际上,只有当您提供一个替代项时,这才有效,例如Silverlight就是这样编译的。它是一个混合模式程序集,包含一些本机代码,但大部分是托管代码。因此,64位框架有一个单独的版本。您还将看到启用了非托管调试的mscorlib.ni.dll,这是程序集的非托管版本