2005年6月,.NET CLI(第3版)正式成为ECMA标准ECMA-335(第3版),第3版.NET CLI对应.NET Framework 2.0。了解第3版.NET CLI对了解.NET Framework 2.0内核有重要意义,本文试通过简要分析.NET CLI(第3版)包含的内容,初步了解一般资料中较少涉及的.NET Framework 2.0内核相关信息。
1 什么是.NET CLI
.NET CLI是.NET公共语言基础结构(.NET Common Language Infrastructure)的缩写,.NET Framework基于.NET CLI。.NET CLI文档中对.NET CLI的定义是:.NET CLI定义了一个公共语言基础结构,在公共语言基础结构中,各种不同的高级语言开发的应用程序,无需修改程序以适应不同的系统环境特有的特性,就可以在不同的系统环境下运行。
这个定义点明了.NET Framework的基本特性:
1、.NET Framework和Java一样,具有跨平台性,“不同的系统环境”实际上就是不同的硬件和软件平台(包括操作系统),理论上说,在任何硬件和软件平台上,只要实现.NET Framework,就可以不加修改地运行任何.NET应用程序,而无需考虑平台自身的特性。
2、.NET Framework还可以支持多种高级语言(跨语言性),任何.NET编程语言,即.NET平台支持的高级语言,开发的应用程序在.NET Framework上是等价的,都可以在.NET Framework上运行。
无论商业的炒作如何进行,系统底层程序员应该保持清醒的头脑,从.NET Framework的基本特性看来,通常被称为.NET CLR(.NET公共语言运行时,.NET Common Language Runtime)的.NET Framework底层,本质上一定是类似于Java虚拟机(Java VM)的虚拟机,.NET CLR执行的代码一定也是一种虚拟机代码或者中间代码,否则.NET Framework不可能实现跨平台,特别是适应不同的硬件平台。因为不同的硬件平台,CPU的指令集可能是不同的,只有通过虚拟机将中间代码在运行时动态转换为CPU指令集支持的本机代码,才能实现中间代码在不同硬件平台上的同样执行,进而实现适应不同的硬件平台。
.NET Framework可以支持多种.NET编程语言,这意味着:任何.NET编程语言的源程序最终都编译成相同的中间代码,也就是可以在.NET CLR(虚拟机)上运行的虚拟机代码。
2 .NET CLI包含的内容
.NET CLI(第3版)文档包含下列部分:
1、概念和体系结构:描述.NET CLI的全部体系结构,提供公共类型系统(CTS,Common Type System)、虚拟执行系统(VES,Virtual Execution System)和公共语言规范(CLS,Common Language Specification)的标准化描述,还提供对元数据(Metadata)的信息性描述。
2、元数据的定义和语义:提供元数据的标准化描述,包括元数据在.NET扩展PE文件格式中的位置(以.NET扩展PE文件格式的形式表示),元数据的逻辑内容(以表格及其关联的集合的形式表示,实际上使用了形式化方法表示)和元数据的语义(以汇编成为虚拟机代码的汇编器ilasm理解的形式表示)。
3、CIL指令集:描述公共中间语言(CIL,Common Intermediate Language)指令集。CIL又称MSIL(微软中间语言,Microsoft Intermediate Language),CIL指令就是虚拟机代码或者中间代码的指令。
4、Profile和库:提供CLI库的简要介绍,以及将其分解为Profile和库的规范。这里有一个配套的文件CLILibraryTypes.xml,考虑过随这一部分一起发布,不过该文件是XML格式的,该文件提供了CLI库中每一个类、值类型和接口的细节说明。“Profile”一词在这里的含义是库的集合,一起组合起来构成提供一定功能级别的一致性整体,换而言之,不同的Profile对应不同的库集合,提供的功能级别也不同,“Profile”一词亦可翻译成“库概要”或者“库配置”,但切勿翻译成“配置文件”。
5、调试交换格式:可交换(.NET CLI通用)调试信息的