CLR 和 CLI - 有什么区别?

问题描述 投票:0回答:7

我想知道CLR和CLI到底有什么区别?从我到目前为止所读到的内容来看,似乎表明 CLI 是 CLR 的子集。但是 CLR 中的所有内容不是都是强制性的吗?创建 CLI 时,CLR 到底可以省略什么?

.net clr command-line-interface
7个回答
87
投票

CLR 是 Microsoft 对 CLI 标准的实现。


58
投票

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

您可以将其视为 .NET 的私有操作系统,在 .NET 应用程序启动之前启动并加载。

CLR 满足任何 .NET 应用程序的某些基本要求,否则需要编写大量代码才能实现;本质上是整体的要求,对于任何类型的应用程序以良好、高效和安全的方式运行都是必不可少的[例如处理内存分配并在不需要时释放它,避免悬空指针,避免类型转换错误等。]

另一方面,CLI 是一个规范/一组指南,解释如何实现应用程序执行环境以及生成的应用程序代码的性质,允许在不同的计算机平台上使用多种高级语言,而无需针对特定体系结构进行重写.

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

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

用外行人的话来说,CLI 是菜谱,而 CLR 是菜肴:-)


18
投票
CLR(公共语言运行时)是微软对VES(虚拟执行系统)的实现。 VES 与 CTS(通用类型系统)、CLS(通用语言规范)和元数据规范都是 CLI(通用语言基础设施)规范的一部分。

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

ECMA C# 和公共语言基础设施标准


0
投票
CLR 是运行所有类型的 .net 应用程序的 .net 执行环境。例如,当您使用 C# 或 dot NET 堆栈中的其他语言编写代码时,编译器会对其进行编译并将其转换为托管模块。托管模块是 IL(中间语言)和元数据。最重要的是,要记住的重要一点是,每当您编译源代码时,编译器都会将其翻译为托管模块。澄清一下,这不是你的处理器将执行的机器代码。事实上,IL 是一种接近汇编语言的中间语言。同样,它也以面向对象机器语言而闻名。

查看这篇文章了解更详细的解释:

http://alevryustemov.com/programming/common-language-runtime/


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

同时

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


-1
投票
正如回答的那样,CLR 是微软的实现。该组件本身在 Visual Studio 安装程序中称为 C++/CLI,但安装后,它会显示为 CLR。

您可以添加删除程序>> Visual Studio 2009,修改安装并添加或删除C++/CLI。它的列出方式如下面的屏幕截图所示,但再次安装后,项目类型在 Visual Studio 中称为 CLR。

enter image description here


-2
投票
CLR 是 CLI、CTS、CLS 集成工作的完整环境,还包括垃圾收集、内存管理、安全性、本机代码的中间语言...

CLI是可执行代码格式和运行时的规范 可以执行该代码的环境。

© www.soinside.com 2019 - 2024. All rights reserved.