1.CIL - 公共中间语言
1).Common Intermediate Language,公共中间语言。CIL最初是随着.NET由微软一起发布的,因此之前也叫做MSIL(Microsoft Intermediate Language),后来进行了标准化,之后便被称做CIL。在一些书或文章中,CIL也会简写为IL,其实都是指同样的东西。
2).C#源程序在被编译为程序集以后,就独立于C#,因此程序集可以由其他种类的语言所调用;同时,因为程序集并没有包含本地机器的指令,所以它与具体的机器类型也分隔开了,可以被装有.NET框架的任何机器运行,所以说它是介于C# 与 机器语言中间的一种语言,它的名字就叫做CIL。
无论是C#或是VB.NET最终生成的程序集是一样的(即CIL语言代码)。
2.BCL 和 FCL
1)BCL-基类库: 那些由编译器直接支持,将语言本身的关键字类型转换为CIL类型的,就叫做基元类型,它是FCL的一个子集。BCL中包含了与编译器及CIL语言关系紧密的核心类型,以及常见开发任务中都会使用到的类型。
2)FCL-框架类库: 从功能上来看,可以将FCL框架类库划分成以下几层。
•最内一层,由BCL的大部分组成,主要作用是对.NET框架、.NET运行时及CIL语言本身进行支持,例如基元类型、集合类型、线程处理、应用程序域、运行时、安全性、互操作等。
•中间一层,包含了对操作系统功能的封装,例如文件系统、网络连接、图形图像、XML操作等。
•最外一层,包含各种类型的应用程序,例如Windows Forms、Asp.NET、WPF、WCF、WF等
3.CTS-公共类型系统
CTS(Common Type System,公共类型系统) 假设要开发一套新的语言,这种语言和C#或VB.NET一样,在编译后也能够生成CIL代码,也可以在.NET环境下运行,那么首先需要什么呢? 要开发的新语言相当于CIL的高级语言版本,所以实际上要做什么并不是由新语言决定的,而是由CIL来决定的。因此,需要一套CIL的定义、规则或标准。这套规则定义了我们的语言可以做什么,不可以做什么,具有哪些特性。这套规则就称作CTS(Common Type System,公共类型系统)。任何满足了这套规则的高级语言就可以称为面向.NET框架的语言。C#和VB.NET不过是微软自己开发的一套符合了CTS的语言,实际上还有很多的组织或团体,也开发出了这样的语言,比如Delphi.Net、FORTRAN等。
4.CLS-公共语言规范
面向.net平台的语言有多种,未来也有可能增加,现在我们有种需求,用C#开发出的程序集可否在N#运行?
这就是CLS需要解决的问题:定义一套规范,凡是符合这套规范的.net平台下语言开发的程序集就可以相互引用,凡是遵循这套规范的语言开发出的程序集,这个程序集就叫做CLS兼容程序集(CLScompliant assembly)。
5.程序集
1.程序集首先是一个windows可执行文件。
那么什么样格式的文件才是一个Windows可执行文件?这个格式被称做PE/COFF(Microsoft Windows Portable Executable/Common Object File Format),Windows可移植可执行/通用对象文件格式。Windows操作系统能够加载并运行.dll和.exe是因为它能够理解PE/COFF文件的格式。显然,所有在Windows操作系统上运行的程序都需要符合这个格式,当然也包括.NET程序集在内。在这一级,程序的控制权还属于操作系统,PE/COFF头包含了供操作系统查看和利用的信息。此时,程序集可以表示成如下图:
6.CLR-公共语言运行时
CLR是一个软件层或代理,它管理了.NET程序集的执行,主要包括:管理应用程序域、加载和运行程序集、安全检查、将CIL代码即时编译为机器代码、异常处理、对象析构和垃圾回收等。
CLR不过是一个.NET程序集的运行环境而已,有点类似于Java虚拟机,其主要作用如示意图:
7-CLI——公共语言基础
CLI是一个国际标准,由ECMA和ISO进行了标准化,全称为Common Language Infrastructure(公共语言基础)。它只是一个概念和汇总,实际上本章的每一小节都是这个标准的一部分。CLI包括:CIL、CTS、CLS、VES、元数据、基础框架。
看到这里很多人会感觉到有点奇怪,为什么CLI和.NET框架包含的内容如此雷同?它们之间是什么关系?简单来说,CLI是一个标准,而.NET框架是这个标准的具体实现。在CLI中,并没有CLR的概念,只有VES,而CLR就是.NET框架中VES的具体实现。既然CLI只是一个标准,而.NET框架是它在Windows平台上的具体实现,那么是不是就只有.NET框架这一个CLI的实现?显然不是,Mono Project就是CLI标准的另一个实现。Mono Project的目标就是将.NET框架多平台化,使其可以运行在各种平台上,包括Mac OS、Linux等。
转自:http://www.cnblogs.com/JimmyZhang/archive/2012/11/27/2790759.html