2013-05-05 99 views
3

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

我想是的。

回答

7

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

+0

我看,有些人喜欢单声道运行时,像Portable.NET运行。 谢谢,我明白了。 – Aremyst 2013-05-05 14:14:26

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()函数。

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

7

公共语言基础(CLI),在standard ECMA-335定义,描述了其中包括:

  • 通用类型系统(CTS);
  • the 公共语言规范(CLS);
  • the 虚拟执行系统(VES);
  • the Common Intermediate Language(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运行时的特定实现......这是相反的方式。

+0

谢谢你的回答。但是我一开始就迷失了:什么是运行时系统? – BKSpurgeon 2016-02-17 04:29:22