在本章结束前,简单说一下.NET平台的平台无关性。令许多程序员惊讶的是,.NET程序集可以在非微软操作系统(如Mac OS X、各种版本的Linux和Solaris)上开发和执行。要理解它是怎么做到的,需要掌握在.NET领域中的另外一个缩写词CLI(公共语言基础设施)。
当微软发布C#语言和.NET平台时,也发布了一整套正式的文档来说明C#和CIL语言的语法及语义、.NET程序集格式、核心.NET命名空间以及假定的.NET运行时引擎的结构(叫做虚拟执行系统,即VES)。
让我们感到高兴的是,这些文档已经提交到ECMA,并被ECMA批准成为官方的国际标准(http://www.ecma- international.org)。这些规范包括:
ECMA-334,C#语言规范;
ECMA-335,公共语言基础设施(CLI)。
它们可以使第三方组织在各种操作系统和处理器上构造不同的.NET平台发行版,理解到这一点,这些文档的重要性就显而易见了。ECMA-335也许是这两个规范中更"有内容"的一个,它分为5部分,如表1-4所示。
表1-4 CLI的划分
ECMA-335的划分
含 义
部分I:架构
描述了整个CLI的架构,包括CTS和CLS的
规则以及.NET运行时引擎的机制
部分II:元数据
描述了.NET元数据的细节
部分III:CIL
描述了CIL代码的语法和语义
32
部分IV:库
在较高层次概述了必须由.NET发行版支持
的最少的和最完整的类库
部分V:附录
其他内容,如关于类库设计指南和CIL编译器实现的细节
需要注意,部分IV(库)仅仅定义了最基本的命名空间集,这些命名空间表示了一个CIL发行版应有的核心服务(集合、控制台I/O、文件I/O、线程、反射、网络访问、核心安全需求、XML处理等)。CLI没有定义用于Web开发(ASP.NET)、数据库访问(ADO.NET)或桌面图形用户界面(GUI)应用开发(Windows Forms/WPF)的命名空间。
令人高兴的是,为了提供具有完整功能的、产品级的开发平台,主流的.NET版本都扩展了CLI库,加入了与微软ASP.NET、ADO.NET和Windows Forms兼容的等效功能。目前,CLI实现有两个主要的流派(除了微软提供的针对Windows的实现之外)。虽然本书专注于使用微软.NET建立.NET应用程序,但仍在表1-5中提供了Mono和Portable.NET项目的相关信息。
表1-5 开源.NET版本
发 行 版
作 用
http://www.mono-project.com
Mono项目是一个CLI的开源版,
针对各种版本Linux(如SuSE、Fedora等)
以及Win32和Mac OS X
http://www.dotgnu.org
Portable.NET是另外一个CLI的开源版本,
运行在很多操作系统上。Portable.NET
的目的是在尽可能多的操作系统上运行
(Win32、AIX、BeOS、Mac OS X、Solaris、
所有主要的Linux发行版本,等等)
Mono和Portable.NET都提供符合ECMA标准的C#编译器、.NET运行时引擎、代码示例、说明文档和许多与微软的.NET Framework 3.5 SDK功能相当的开发工具。此外,Mono和Portable. NET都有VB.NET、Java和C编译器。
说明 附录B介绍了如何使用Mono创建跨平台.NET应用程序。
.NET的平台无关性
最新推荐文章于 2023-03-17 13:18:36 发布