“CLR”与“.NET运行时”是一回事吗?

时间:2013-05-05 14:04:03

标签: .net runtime clr

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

我想是的。

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

standard ECMA-335中定义的公共语言基础结构(CLI),其中包括:

  • Common Type System (CTS);
  • 公共语言规范(CLS);
  • 虚拟执行系统(VES);
  • 通用中间语言(CIL)。

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

CLI有多种实现:.NET Framework,.NET Micro Framework,XNA Framework,Silverlight,Mono平台等......每个平台或框架都实现了CLR的一个或多个版本。 / p>

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

由于Microsoft CLR是第一个也是最知名的CLR,因此无条件使用术语CLR通常指的是没有特定版本的.NET运行时。但是CLR不是不是 .NET运行时的特定实现......它是相反的。

答案 2 :(得分:6)

CLR是.NET程序所需的运行时支持的部分。相当重要的一部分,但它不是唯一的一部分。您始终会在.NET进程中加载​​一组本机DLL。您可以通过打开非托管调试,Project + Properties,Debug选项卡,勾选“启用非托管代码调试”来查看它们。启动后,您会看到那些带有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()函数。

您还会看到从Windows操作系统DLL的c:\ windows \ system32加载的一堆DLL。重要的是ntdll.dll,kernel32.dll和user32.dll。在典型的.NET进程中还有很多。您无法将它们视为.NET运行时组件,因为Windows中的每个进程都将使用这些组件。