【问题标题】:Is mscorlib.dll/mscoree.dll loaded when .NET application runs.NET 应用程序运行时是否加载了 mscorlib.dll/mscoree.dll
【发布时间】:2012-03-21 16:23:03
【问题描述】:

我正试图澄清一些事情。

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

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

另外,了解更多关于如何执行 .NET 程序的好资源是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

    是的。您将始终加载 mscoree.dll,这是默认 CLR 主机的引导程序。它是一个非托管 DLL。每个 .NET 程序集都包含少量本机代码,只需跳转到该 DLL。然而,它确实会被最近的 Windows 版本直接加载,操作系统加载程序具有内置的 .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 版。

    【讨论】:

      【解决方案2】:

      我建议阅读 Jefrey Richter 的书 CLR via C#。它提供了非常清晰的解释:)

      你也可能会觉得这个问题很有帮助:Why is an assembly .exe file?

      【讨论】:

        【解决方案3】:

        .Net Executable 与任何其他 PE 文件没有什么不同。因此,与本机可执行文件中的每个导入 dll 一样,mscorlib.dll 被加载到 .net 可执行文件的进程虚拟空间中。 如果你感兴趣,可以阅读PE文件格式here

        【讨论】:

          猜你喜欢
          • 2021-04-04
          • 1970-01-01
          • 2010-10-05
          • 1970-01-01
          • 2010-10-19
          • 1970-01-01
          • 2011-10-15
          相关资源
          最近更新 更多