1、MSDN的解释:.NET Framework 是为其运行的应用程序提供各种服务的托管执行环境。
它包括两个主要组件:作为处理运行的应用程序的执行引擎的公共语言运行时 (CLR);
以及 .NET Framework 类库,此类库提供开发人员可从其自己的应用程序中调用的已测试的可重用代码库。
2、 CLR是.NET Framework的核心
CLR的核心是CTS和CLS。任何编程语言,如果想要在.NET CLR上执行,就必需提供一个编译器,
将此语言的程序编译成.NET CLR所认识的metadata以及IL,符合CTS的规定。
CTS是通用类型系统(Common Type System)
CLS是公共语言定义(Common Language Specification)
CLR是公共语言运行时(Common language runtime)
3、CLR集成了很多种语言,它们之间可以相互访问,是因为CLR建立的标准的类型集、元数据、公共执行环境。
由于各种语言间存在着极大的差别,如区分大小写,有的不支持unsigned、操作符重载或者参数可变的方法,
所以要想创建这种让别的语言能访问的程序,自己所用的编程语言只能使用其它语言都支持的那些特性。
为了帮助我们更好的做到这一点,Microsoft定义了一个"公共语言规范(Common Language Specification,CLS)"
4、 Language complier:语言编译器,每种语言基于.net的语言都会有一个面向CLR的托管模块,也可以理解为语言编译器,把对应的语言编译成MSIL
MSIL:微软中间语言,CLR负责把中间语言编译成为执行程序的计算机可以理解的语言,是一种介于介于高级语言和汇编语言的伪汇编语言.
JIT(Just In-Time compile):即时编译,将MSIL解释为程序可以理解的语言.
5、CLR的执行模型
(1) 将源代码(vb、cs)编译成 托管代码块。托管代码块由中间语言和元数据组成。
(2) 将托管代码合并成程序集,也叫组件(dll)。程序集中包含了一张叫做“清单”的模块,
(3) 记录了构成程序 集模块构成的信息包括资源文件及需要引用自己的信息。
(4) 加载公共语言运行库。
(5) 执行程序集的代码。
(6) 生成本地代码。
6、CLI
CLI,公共语言基础架构(Common Language Infrastructure)
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和一个类库
7、BCL FCL
BCL FCL
BCL,基础类库(Base Class Library)
BCL是一个公共编程框架,称为基类库,所有语言的开发者都能利用它。
是CLI(Common Language Infrastructure,公共语言基础结构)
的规范之一,主要包括:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,
XML操作,与事件日志交互,跟踪和一些诊断操作,使用非托管代码,创建与调用动态代码等,粒度相对较小,为所有框架提供基础支持。
FCL,框架类库(Framework Class Library)
FCL提供了大粒度的编程框架,它是针对不同应用设计的框架 ,FCL大部分实现都引用了BCL,例如我们常说的开发框架:ASP.NET、MVC、WCF和WPF等等,提供了针对不同层面的编程框架 。
8、总结
(1)IL/MSIL/CIL Microsoft Intermediate Language)微软中间语言(IL是MSIL的缩写,译为中间语言)
(2)CTS (Common Type System)通用类型系统
(3)CLS (Common Language Specification)公共语言规范
(4)CLR (Common Language Runtime)公共语言运行时(也有的叫公共语言运行库)
(5)JIT (Just in time)即时编译器
(6)CLI 公共语言基础架构(Common Language Infrastructure)
(7)BCL 基础类库(Base Class Library)
(8)FCL 框架类库(Framework Class Library)