若是要想深刻学习.NET平台,那么标题中的这些关键字对你来讲并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对一些经常使用经常使用名词的理解是颇有必要的,未必强行记忆,但至少要知道它们的含义。程序员
不管经过任何语言构建产品,都必须寄宿到一个平台中运行,这正如咱们的软件运行在操做系统环境同样,操做系统为CLR提供了运行环境,使用.NET构建的程序又运行在CLR之上,CRL为.NET程序的运行提供了温床,CLR提供基本的类库和运行引擎,基本类库封装操做系统函数供开发者方便调用,运行引擎用于编译并运行咱们开发的程序。CLR包含.NET运行引擎和符合CLI的类库。经过.NET平台构建的程序都基于CLR基础类库来实现,而且运行在CLR提供的运行引擎之上。数据库
编译为托管代码时,编译器将源代码翻译为 Microsoft 中间语言 (MSIL),这是一组能够有效地转换为本机代码且独立于 CPU 的指令。MSIL 包括用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其余操做的指令。要使代码可运行,必须先将 MSIL 转换为特定于 CPU 的代码,这一般是经过实时 (JIT) 编译器来完成的。因为公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,所以同一组 MSIL 能够在所支持的任何结构上 JIT 编译和运行。编程
CLI,简称微软中间语言(MSIL)或者中间语言(IL)。CIL是编译器将.NET代码编译成公共语言运行时(CLR)可以识别的中间代码。它是一种介于高级语言(例如C#)和CPU指令之间的一种语言。当用户编译一个.NET程序时,编译器(例如VisualStudio)将C#源代码编译转换成中间语言 (MSIL),它是一种可以被CLR转换成CPU指令的中间语言,当执行这些中间语言时,CLR提供的实时(JIT)编译器将它们转化为CPU特定的代码。因为公共语言运行库支持多种实时编译器,所以同一段中间语言代码能够被不一样的编译器实时编译并运行在不一样的CPU结构上。从理论上来讲,MSIL将消除多年以来业界中不一样语言之间的纷争。在.NET的世界中可能出现下面的状况一部分代码能够用C++实现,另外一部分代码使用C#或VB.NET完成的,可是最后这些代码都将被转换为中间语言。这给程序员提供了极大的灵活性,程序员能够选择本身熟悉的语言,而且不再用为学习不断推出的新语言而烦恼了。安全
CTS是一种类型系统和语言规范,它可以确保CLR可以识别和处理的类型,全部.NET开发语言中的类型,不管时VS.NET类型仍是C#.NET类型最终都会被编译成CLR可以识别的CTS类型,所以CTS是.NET平台类型的抽象。例如VB.NET中的integer类型和C#中的int类型都编译成CTS的System.Int32类型。若是某种语言编写的程序可以在CLR上运行,并不能说明这种语言彻底符合CTS的规范。例如使用C++编写的代码,部分代码并不符合CTS规范,在编译时把这部分不符合CTS的代码会被编译成原始代码本地CPU指令而非中间代码。网络
CLS是CTS的一个子集,全部.NET语言都应该遵循此规则才能建立与其余语言可互操做的应用程序,但要注意的是为了使各语言能够互操做,只能使用CLS所列出的功能对象,这些功能统称为与CLS兼容的功能,它是在.NET平台上运行语言的最小规范,正由于.NET上不一样语言可以轻松交互同样,例如C#编写程序时能够直接引用并使用VB.NET编写的类库。为了达到这样的交互,才制定出CLS规范,在.NET框架自己提供的全部类库(并不是全部)都是与CLS兼容的,在查看MSDN文档时,不兼容的类和方法都被特别标记为不兼容,例如C#中的System.UInt32就标记为”此API不兼容CLS。兼容 CLS的替代API为 Int64。“,这说明并非全部的语言(例如VB.NET或J#)都支持无符号的数据类型,但这种数据类型与CLS不兼容的。架构
CLI是一个开放的技术规范。它是由微软联合惠普以及英特尔于2000年向ECMA倡议的。通用语言基础架构定义了构成.NET Framework基础结构的可执行码以及代码的运行时环境的规范,它定义了一个语言无关的跨体系结构的运行环境,这使得开发者能够用规范内定义的各类高级语言来开发软件,而且无需修正便可将软件运行在不一样的计算机体系结构上。CLI有时候会和CLR混用。但严格意义上说,这是错误的。由于CLI是一种规范,而CLR则是对这种规范的一个实现。框架
欧洲计算机制造商协会(ECMA)已经于2001年10月13日批准C#语言规范(ECMA-334)成为一种新诞生的计算机产业标准。同时国际标准组织ISO也赞成该标准进入该组织的审批阶段。而且,做为.NET与CLR的核心部分,CLI与C#也同时得到了ECMA的批准(ECMA-335)。拥有了C#与CLI这两项标准,你能够本身写出可以运行于任何操做系统上的.NET平台(只要你愿意)。如前所述,著名的MONO项目就是这么干的,MONO项目包括三个核心的部分:一个C#语言的编译器,一个CLI和一个类库。函数
BCL是一个公共编程框架,称为基类库,全部语言的开发者都能利用它。是CLI(Common Language Infrastructure,公共语言基础结构)的规范之一,主要包括:执行网络操做,执行I/O操做,安全管理,文本操做,数据库操做,XML操做,与事件日志交互,跟踪和一些诊断操做,使用非托管代码,建立与调用动态代码等,粒度相对较小,为全部框架提供基础支持。学习
FCL提供了大粒度的编程框架,它是针对不一样应用设计的框架 ,FCL大部分实现都引用了BCL,例如咱们常说的开发框架:ASP.NET、MVC、WCF和WPF等等,提供了针对不一样层面的编程框架 。操作系统