CLR和CLI – 有什么区别?

我是一个相当新的.NET框架,因此我想知道CLR和CLI之间的区别究竟是什么? 从我目前阅读的任何内容来看,似乎表明CLI是CLR的一个子集。 但是,CLR中的所有内容都不是强制性的吗? CLR创build一个CLI时可能会遗漏什么?

CLR是微软实施的CLI标准 。

CLR是.NET应用程序安全托pipe/运行的执行环境。

你可以把它看作是在.NET应用程序启动之前启动和加载的.NET专用操作系统。

CLR负责处理任何.NET应用程序的某些基本需求,否则需要编写许多有意识的代码才能实现; 对于任何types的应用程序来说,它们都是完整的,对于以一种好的,有效的和安全的方式运行是必不可less的[例如,处理内存分配和在不需要时释放它,避免悬挂指针,避免types转换错误等]

另一方面,CLI是一个规范/指导原则,解释了如何实现应用程序执行环境,以及生成的应用程序代码的性质,允许在不同的计算机平台上使用多个高级语言,而不必为特定的体系结构重写。

CLI由Microsoft开发并由ISO和ECMA标准化。

CLR是CLI的VES [虚拟执行系统]部分的实际实现,并且是MS.NET平台的核心组件之一

用外行人的语言,CLI是一种食谱,而CLR是美食:-)

CLR(通用语言运行时)是Microsoft对VES(虚拟执行系统)的实现。 VES以及CTS(通用types系统),CLS(通用语言规范)和元数据规范都是CLI(通用语言基础结构)规范的一部分。

VES是一个标准化的虚拟机规范,为了加载和执行CIL(通用中间语言)模块(dll和exe),必须实现该规范。 VES实现还提供运行时服务,如垃圾收集和安全性。

ECMA C#和通用语言基础结构标准

CLI通用语言基础结构是Microsoft和Microsoft开发的规范或标准

任何符合CLI标准的编程语言都可以访问一个通用的类库,并且可以编译成一个通用的中间语言(字节码)。 一旦编译成通用的中间语言,任何程序都可以被进一步编译到正在运行的特定系统所理解的机器代码中。 它描述了可执行代码和运行时环境 。 简而言之,这允许我们在各种机器上使用各种高级语言,而不用重写代码。

CLRCommon Language Runtime是由Microsoft实施的CLI。

CLI是.NET Framework中的虚拟机组件,更好地称为运行时,负责执行.NET程序。 这是.NET程序的一种操作系统,它执行程序需要处理的许多function。


在这里输入图像说明

其中CIL通用中间语言(Common Intermediate Language) ,其被馈送到CLR中以进一步生成机器码。


CLR的特点:

  1. 内存pipe理
  2. exception处理
  3. 代码访问安全性
  4. 线程pipe理
  5. debugging
  6. validation和编辑
  7. types安全
  8. 垃圾收集

CLR是CLI,CTS,CLS在集成中工作的完整环境,它还包括垃圾回收,内存pipe理,安全性,本地代码的内部语言… CLI是可执行代码格式的规范,以及运行时环境可以执行该代码。