.net CLR和CLI -有什么区别?

pobjuy32  于 2023-02-10  发布在  .NET
关注(0)|答案(7)|浏览(180)

我想知道CLR和CLI之间到底有什么区别?从我目前所读到的,似乎表明CLI是CLR的一个子集。但是CLR中的所有内容不是都是强制性的吗?创建CLI时,CLR中到底可以遗漏什么?

wyyhbhjk

wyyhbhjk2#

CLR是.NET应用程序安全托管/运行的执行环境。
您可以将其视为.NET的私有操作系统,它在.NET应用程序启动之前启动并加载。
CLR负责任何.NET应用程序的某些基本需求,否则需要编写大量精心设计的代码来实现这些需求;本质上是整体性的要求,对于任何类型的应用程序以良好、高效和安全的方式运行都是必不可少的[例如,处理内存分配并在不需要时释放内存,避免悬空指针,避免类型转换错误等]
另一方面,CLI是解释如何实现应用程序执行环境和所生成的应用程序代码的性质的规范/准则集,所生成的应用程序代码允许在不同的计算机平台上使用多种高级语言而无需针对特定体系结构重写。
CLI由Microsoft开发,并由ISO和ECMA标准化。
CLR是CLI的VES [虚拟执行系统]部分的实际实现,并构成MS .NET平台的核心组件之一
用外行人的话来说,CLI是一道菜谱,而CLR则是一道佳肴:-)

v2g6jxz6

v2g6jxz63#

CLR(公共语言运行时)是Microsoft对VES(虚拟执行系统)的实现。VES与CTS(公共类型系统)、CLS(公共语言规范)和元数据规范都是CLI(公共语言基础结构)规范的一部分。
VES是一种标准化的虚拟机规范,必须实现它才能加载和执行CIL(公共中间语言)模块(dll和exe)。VES实现还提供运行时服务,如垃圾回收和安全性。
ECMA C# and Common Language Infrastructure Standards

1hdlvixo

1hdlvixo4#

CLR是.net的执行环境,所有类型的.net应用程序都可以在这里运行。例如,当你用C#或其他语言从. NET堆栈编写代码时,编译器会编译代码并将其转换为托管模块。托管模块是IL(中间语言)和元数据。最重要的是,要记住的重要一点是,无论何时编译源代码,编译器把它翻译成托管模块。2澄清一下,这不是你的处理器要执行的机器码。3事实上,IL是一种接近汇编语言的中间语言。4同样,它也是著名的面向对象机器语言。
查看这篇文章了解更详细的解释:
http://alevryustemov.com/programming/common-language-runtime/

1rhkuytd

1rhkuytd5#

公共语言运行库(CLR)是一种编程,它管理以几种支持语言中的任何一种编写的程序的执行,允许它们共享用任何语言编写的公共面向对象类。它是Microsoft.NET框架的一部分。CLR在某种程度上类似于Sun Microsystems提供的Java虚拟机,用于运行从Java语言编译的程序。Microsoft将其CLR称为“托管执行环境”。为CLR编译的程序不需要特定于语言的执行环境,并且可以轻松地移动到安装Windows 2000或Windows XP的任何系统上并在其上运行。

公共语言基础结构是由Microsoft开发的标准,它允许在不同的计算机平台上使用多种不同的高级语言,而无需为任何特定的体系结构重写代码。简单地说,通用语言基础设施(CLI)使以任何常用编程语言编写的应用程序能够使用公共运行时程序(而不是每种语言的特定程序)在任何操作系统上运行。.NET框架、.NET核心和Mono是CLI的一些实现。

mbskvtky

mbskvtky6#

正如答案所说,CLR是微软的实现。组件本身在Visual Studio安装程序中称为C++/CLI,但一旦安装,它就显示为CLR。
你可以添加删除程序〉〉Visual Studio 2009,修改安装和添加或删除C++/CLI。它是这样列出的,如下面的屏幕截图所示,但再次安装后,项目类型在Visual Studio中称为CLR。

u3r8eeie

u3r8eeie7#

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

相关问题