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