我想知道CLR和CLI到底有什么区别?从我到目前为止所读到的内容来看,似乎表明 CLI 是 CLR 的子集。但是 CLR 中的所有内容不是都是强制性的吗?创建 CLI 时,CLR 到底可以省略什么?
CLR 是安全托管/运行 .NET 应用程序的执行环境。
您可以将其视为 .NET 的私有操作系统,在 .NET 应用程序启动之前启动并加载。
CLR 满足任何 .NET 应用程序的某些基本要求,否则需要编写大量代码才能实现;本质上是整体的要求,对于任何类型的应用程序以良好、高效和安全的方式运行都是必不可少的[例如处理内存分配并在不需要时释放它,避免悬空指针,避免类型转换错误等。]
另一方面,CLI 是一个规范/一组指南,解释如何实现应用程序执行环境以及生成的应用程序代码的性质,允许在不同的计算机平台上使用多种高级语言,而无需针对特定体系结构进行重写.CLI 由 Microsoft 开发,并由 ISO 和 ECMA 标准化。
CLR 是 CLI 的 VES [虚拟执行系统]部分的实际实现,形成了 MS.NET 平台的核心组件之一
用外行人的话来说,CLI 是菜谱,而 CLR 是菜肴:-)
同时
通用语言基础设施是微软开发的一个标准,允许在不同的计算机平台上使用多种不同的高级语言,而无需为任何特定架构重写代码。简单来说,公共语言基础设施 (CLI) 使使用任何常用编程语言编写的应用程序能够使用通用运行时程序(而不是每种语言的特定程序)在任何操作系统上运行。 .NET Framework、.NET Core 和 Mono 是 CLI 的一些实现。
CLI是可执行代码格式和运行时的规范 可以执行该代码的环境。