c# - .NET应用程序运行时是否加载了mscorlib.dll/mscoree.dll

标签 c#

我想澄清一些事情。

  1. 运行 .NET 控制台应用程序时,mscorlib.dll/mscoree.dll 是否会加载到进程的虚拟地址空间中?

  2. mscorlib.dll 和 mscoree.dll (CLR) 是托管 dll。对吗?

此外,有什么好的资源可以帮助您更好地了解 .NET 程序的执行方式?

最佳答案

是的。您将始终加载 mscoree.dll,这是默认 CLR 主机的 Bootstrap 。它是一个非托管 DLL。每个 .NET 程序集都包含一小部分 native 代码,只是跳转到该 DLL。然而,它确实被最近的 Windows 版本直接加载,操作系统加载器内置了 .NET 感知。当您打开非托管调试选项、Project + Properties、Debug 选项卡时,您可以在 Debug + Modules 窗口中看到它。然后您还会看到 mscorjit.dll、mscorwks.dll 和 msvcr80.dll,这是运行托管代码所需的其他三个 native 代码块。分别是即时编译器、CLR和C运行时支持库。它们在 .NET 4 中具有不同的 DLL 名称。

从技术上讲,可以不加载 mscorlib.dll,编译器有/nostdlib 选项来避免引用该程序集。实际上,只有在您提供替代品时才有效,例如,这就是 Silverlight 的编译方式。它是一个混合模式程序集,具有一些 native 代码但主要是托管代码。因此,它有一个针对 64 位框架的单独版本。您还会看到启用了非托管调试的 mscorlib.ni.dll,这是程序集的 ngen-ed 版本。

关于c# - .NET应用程序运行时是否加载了mscorlib.dll/mscoree.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9545603/

相关文章:

c# - C# 应用程序中的 SQL 过滤器和或语句

c# - OpenStreetMap XML 到对象

c# - 'system.argumentexception' 上传多部分时

c# - 使用 LINQ 删除字典中的重复项和这些重复项的计数

c# - 如何使用 Windows 应用程序在服务器上执行 shell 脚本

c# - 在 OpenXML (PresentationML) PowerPoint (PPTX) 中计算文本 (TextBody) 的大小(范围)

c# - 体感开发。使用的硬件怎么样?

c# - WEB API 启动类异常

c# - 增强 XML 解析的复杂性 - c# XML Looping

c# - 如何将 Azure CDN 作为 ASP.NET MVC 工作流程的一部分包含在内?