CLR 和 CLI - 有啥区别?

Posted

技术标签:

【中文标题】CLR 和 CLI - 有啥区别?【英文标题】:CLR and CLI - What is the difference?CLR 和 CLI - 有什么区别? 【发布时间】:2009-01-26 18:04:40 【问题描述】:

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

【问题讨论】:

【参考方案1】:

CLR 是微软对CLI standard 的实现。

【讨论】:

它也是如此,您只需将目标架构设置为“液体”。 感谢您的快速回答。所以这意味着至少在理论上我们可以有一个 CLI 的第三方实现,它可以在不同的操作系统上运行并支持类似于 JVM 的 .NET 组件? @Naveen - 看看 Mono 就是这样。 据此***.com/questions/9321803/…声称Mono实现了CLR。这是错误的吗?说 Mono 实现 CLI 而不是 CLR 是否更正确? 这个答案并不正确...... CLR是VES的实现......见下面的答案【参考方案2】:

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

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

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

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

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

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

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

【讨论】:

请注意,除了一些解释外,这与 Cody Brocious 的回答相同。解释提供了多少价值,这是一个见仁见智的问题。对 .Net 的引用可能不准确;据我了解,.Net 实现的不仅仅是 CLI 标准。【参考方案3】:

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

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

ECMA C# and Common Language Infrastructure Standards

【讨论】:

【参考方案4】:

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

查看这篇文章以获得更详细的解释:

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

【讨论】:

【参考方案5】:

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

虽然

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

C++/CLI 与 CLR 完全不同。一种是语言,另一种是 VES 实现。【参考方案7】:

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

【讨论】:

以上是关于CLR 和 CLI - 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

vs2012 发布网站Release发布模式 any cpu 与.net与mixed platforms 有啥区别?

egret eui和gui有啥区别

C#,class A 和public class A有啥区别?

vue和vue-cli的区别与联系

npm install -g react-native-cli 与使用 npx react-native init <project name> 有啥区别?

C#里类型初始化器和构造方法有啥区别 他们分别在啥情况下用?