公共语言基础设施如何运作以及它的目的是什么?

时间:2014-09-25 09:54:34

标签: java c# c++-cli

作为一名Java程序员,CLI的概念对我来说似乎不太清楚。开发C#应用程序是否意味着完全相同的二进制可执行文件只需编译一次,然后可以在Windows上执行,如果安装了.NET框架,并且在安装了Mono的Linux上执行?如果是这样,那怎么办?

2 个答案:

答案 0 :(得分:3)

是的,你是对的。

当我们编译代码时,将创建一个程序集。这个程序集可以稍后加载到将编译MSIL代码的CLR,该代码存在于本机代码的程序集文件中,我们的应用程序将启动。

您引用的CLI是一种中间语言,在该语言中,您使用C#或其他.net语言编写的代码将由相应的编译器编译。此外,CLR“理解”的语言可以将其编译为本机代码。

此外,程序集不是二进制可执行文件。它可以有两个表单,可执行文件或dll。它们中的任何一个都是定义应用程序类型等的文件集合。

因此,底线CLI只有一个目的。

更新

  

所以你提到的程序集大致相当于字节码   java,在运行时获得JIT编译并且与平台无关吗?

正如wikipedia中所述:

  

通用中间语言(CIL,发音为“sil”或“kil”)   (以前称为Microsoft中间语言或MSIL)是   Common公司定义的最低级人类可读编程语言   语言基础结构(CLI)规范,由.NET使用   框架和单声道。面向CLI兼容运行时的语言   环境编译到CIL,它被组装成一个目标代码   具有字节码样式的格式。 CIL是面向对象的程序集   语言,完全基于堆栈。它的字节码被翻译成   本机代码或 - 最常见 - 由虚拟机执行。

CLR via C#, by Jeffrey Richter的第一章(CLR的执行模型)进行了详细的上述详细阅读以及与之相关的更多内容。

答案 1 :(得分:1)

CLI是.Net的.Net模拟。 Mono不支持Windows所有的库。