【问题标题】:Is "CLR" the same thing as ".NET runtime"?“CLR”与“.NET 运行时”是一样的吗?
【发布时间】:2013-05-05 14:04:02
【问题描述】:

在阅读 Troelsen 的书“Pro C# 5.0 and the .NET 4.5 Framework”时,我遇到了这两个术语。 我或多或少了解公共语言运行时(CLR)是什么,但“.NET 运行时”与 CLR 是一回事吗?

我想是的。

【问题讨论】:

    标签: .net runtime clr


    【解决方案1】:

    公共语言运行时是 .NET 运行时的特定实现,但也有其他的——即the Mono runtime

    【讨论】:

    • 我明白了,其他的比如 Mono 运行时,比如 Portable.NET 运行时。谢谢,我知道了。
    【解决方案2】:

    standard ECMA-335 中定义的通用语言基础结构 (CLI) 描述了以下内容:

    • 通用类型系统(CTS);
    • 通用语言规范 (CLS);
    • 虚拟执行系统 (VES);
    • 通用中间语言 (CIL)。

    VES 在此列表中脱颖而出(它不是通用),并且是对假设运行时系统的描述。实际的运行时实现通常称为公共语言运行时 (CLR),但该术语并未出现在 ECMA-335 中。

    CLI 有多种实现方式:.NET Framework、.NET Micro Framework、XNA Framework、Silverlight、Mono 平台等...每个平台或框架都实现了一个或多个版本的 CLR。​​

    有 Microsoft CLR(又名 .NET CLR),通常称为 .NET 运行时。还有一个 Mono CLR,通常称为 Mono 运行时。还有 Silverlight CLR 和 .NET Compact CLR。

    由于 Microsoft CLR 是第一个也是最著名的 CLR,因此对 CLR 一词的不合格使用通常指的是没有特定版本的 .NET 运行时。但是 CLR 不是 .NET 运行时的特定实现......它是相反的。

    【讨论】:

    • 感谢您的回答。但一开始我就迷路了:什么是运行时系统?
    【解决方案3】:

    CLR 是 .NET 程序所需的运行时支持的一部分。相当重要的一部分,但它不是唯一的。您总是会在 .NET 进程中加载​​一组本机 DLL。您可以通过打开非托管调试,项目+属性,调试选项卡,勾选“启用非托管代码调试”来查看它们。启动后,您可以在 Debug + Windows + Modules 窗口中看到这些 DLL。

    我将记录 .NET 4.5 版的名称:

    • mscoree.dll,“加载程序存根”。这是加载您的 .NET 程序的程序。 Windows 对这个 DLL 有特殊的了解,加载程序在检测到 .NET 可执行文件时会自动将控制权转移给它。它所做的一件非常重要的事情是将 .NET 进程转换为 64 位进程,即使 EXE 标头本身表示一个 32 位进程。
    • mscoreei.dll,默认 CLR 主机。 CLR 需要一个宿主代码,它可以使 CLR 适应所需的运行时特性。自定义 CLR 主机的示例是 SQL Server 和 ASP.NET。调试 .NET 程序时,Visual Studio 托管进程 vshost.exe 处于活动状态。该 DLL 还负责 .NET 4+ 中内置的并行版本控制支持,允许进程拥有多个 CLR 版本。
    • clr.dll,就是CLR
    • clrjit.dll,即即时编译器
    • msvcr110_clr0400.dll,C 运行时库。其他 DLL 是用 C++ 编写的,该 DLL 包含基本的运行时支持代码。你也可以自己使用一些,例如 Math.Pow() 最终会调用这个 DLL 中的 pow() 函数。

    您还会看到从 c:\windows\system32 加载的大量 DLL,即 Windows 操作系统 DLL。重要的是 ntdll.dll、kernel32.dll 和 user32.dll。在典型的 .NET 进程中还有更多。您不能真正将它们算作 .NET 运行时组件,因为 Windows 中的每个进程都会使用它们。

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多