快速理解.NET Framework
引言
本文着眼于微软.NET框架。这是较新发布的软件开发环境,它帮助开发者快速开发应用程序并且提供各种不同语言像Visual Basic .NET, C#, ASP .NET, 和Jscript .NET等开发最合适的,高效的,可扩展的,面向性能的应用程序 。
.NET框架概述
.NET框架是一种新的计算平台,它在Internet高度分布的环境中简化应用程序开发
服务
NET框架提供以下服务:
开发软件应用工具
执行软件应用的运行时环境
服务器基础设施
帮助开发者减少编码提高工作效率的增值只能软件
.NET框架将使开发者为不同设备和不同平台开发应用程序,如:windows应用程序、web应用程序、windows服务和web服务。
目标
设计.NET框架是为了实现下列目标:
一个一致的面向对象编程环境,目标代码能本地化存储和执行,本地化执行而不是分布式Internet,或者远程执行。
一个减少软件部署和版本冲突的代码编辑环境。
一个确保安全的代码执行的代码编辑环境,包括来自未知的或是不能完全信任的社团的代码。
一个能消除脚本的或解释性的环境引起的性能问题的代码编辑环境。
开发者在面对大量不同应用系统类型时有一致的开发体验,如基于Windows的应用程序和基于Web的应用程序。
构造所有工业标准信息来确保基于.NET框架的代码能够集成任何其他代码。
理解.NET框架体系结构
.NET框架有两个组件:.NET框架类库和公共语言运行时。
.NET框架类库使类型(CTS)变的简单,它对于.NET语言来说是公共的。
公共语言运行时组成部分有由:(类加载器)加载程序的IL代码并将起编译成本地代码到运行时,执行和管理代码来加强安全和类型安全,并且提供线程支持。
.NET框架体系结构最顶部是像VB .NET C#, VJ#, VC++ .NET之类的语言;开发者能开发(使用上面的任何语言)像Windows窗体,Web窗体,Windows服务和XML Web服务。
理解.NET框架的角色
.NET框架有两个组要的组件:公共语言运行时(CLR)和.NET框架类库。公共语言运行时是.NET框架的基础。CLR 在运行时管理代码,提供像内存管理,线程管理和remoting之类的核心服务,同时也加强严格的类型安全和促进代码正确来确保程序的安全性和健壮性(鲁棒性)。代码管理的概念是CLR的基本原则。针对CLR的代码被认为是可管理的代码,而不是针对CLR的代码则被认为是不可管理的代码。
类库是.NET框架的一个完整的组件, 包括可重用类的面向对象集合,它使我们能用来开发应用程序包括传统的命令行或是任何像Windows窗体,ASP. NET Web窗体和新近发明的XML Web 服务的Windows服务这样的图形用户接口(GUI)。
欧洲计算机制造商协会(ECMA)标准定义了通用语言规范(CLS);这加强了软件开发语言能够进行互操作。按照CLS编写的代码应该能和另一个符合CLS语言的代码一起编译。因为由符合CLS语言支持的代码将会被编译成中间语言(IL)代码。CLR引擎执行IL代码。这保证了符合CLS语言的互用性。微软.NET框架支持的语言有Microsoft Visual Basic .NET, Microsoft Visual C#, Microsoft Visual C++ .NET, and Microsoft Visual J# .NET.
语言编译器生成中间语言代码,叫做微软中间语言(MSIL),它使不同可互操作的.NET语言编写程序。
ECMA标准,公共语言架构(CLI),定义了IL代码需要执行的基础架构的规范。CLI提供一个公共类型系统(CTS)和像类型安全,可管理的代码执行和side by side执行的服务。
图1.微软.NET框架的ECMA标准
.NET框架提供基础架构和服务。CLI规范.它们包括:
公共语言运行时:
CLR包括CLI
CLR也提供.NET应用程序的执行环境
公共类型系统:
提供数据类型,值,对象类型。这使得开发人员能用不同的语言开发应用程序。.NET语言共享CTS意味着所有在应用程序中的类型在CLI类型定义中是一样的。
类型安全:
.NET框架在值和对象上执行操作,因为.NET框架需要知道每个值和对象的类型并且引用值和对象类型。
可管理的代码执行
.NET框架管理执行.NET应用程序时对象的状态。
.NET框架自动分配内存并提供来机收集机制来重新分配内存
Side-by-side执行
.NET框架通过使用不同版本的装配器允许同一应用程序的不同版本运行在同一机器上。装配器由IL代码和元数据组成。元数据决定应用程序的依赖关系。通过这个,.NET框架运行时能执行多种版本装配器并且解决遗留的开发环境的主要问题。那就是DLL HELL?
.NET装配器
图2 Side-by-side执行
理解.NET框架CLR
公共语言运行时:
运行时环境
CLR把应用程序编译成有运行时,把IL代码编译成本地代码,执行代码
运行时服务
内存管理
类型安全
增强安全
异常管理
线程支持
调试支持
理解.NET框架CLR的体系结构
类加载器,将类加载到CLR。
MSIL到本地代码的编译,将把MSIL转变成本地代码。
代码管理器,它在代码执行期间进行管理。
内存分配和垃圾收集,表现为自动内存管理。
安全的引擎,使用微软提供的工具和在控制面板对.NET框架配置加强安全限制包括代码级安全、文件及机器级安全。
类型检查器,增强强类型检查。
线程支持,提供对应用程序的多线程支持。
异常管理器,提供对运行时异常处理的机制。
调试引擎,允许开发者调试应用程序的不同类型。
COM配置,允许.NET应用程序与COM应用程序交换数据。
基类库支持,提供应用程序运行时所需的类。
公共语言运行时的特征
CLR有以下特征:
管理内存:
内存分配
内存的重分配(垃圾收集)
线程执行支持
代码执行
代码安全检查
编译
MSIL到本地代码
基于信任的代码安全(对执行代码的授权。代码级,文件级,机器级)这些特征对运行在公共语言运行时的可管理代码来说是固有的。
理解CLR
为了执行程序并且获得可管理执行环境的所以好处,我们用CLS支持的.NET框架语言编写代码。语言编译器将源代码编译成由CPU相关的代码和平台相关的指令组成的MSIL代码。MSIL有下列组成:
能够执行算术和逻辑运算的指令。
直接访问内存。
控制执行流
处理异常
MSIL代码能够在执行前被编译成特定CPU指令,CLR所需要代码的信息只有元数据。元数据描述代码并且定义代码类型包括引用代码在运行期用到的其他类型。
一个装配器由精简的可执行文件组成。当执行PE文件的时候类加载器价载MSIL代码而元数据把精简的可执行文件编成运行时内存。
PE文件执行之前它将代码传递到本地代码编译器进行编译,IL到本地代码的编译是有JIT编译器完成的。因为不同的CPU架构和编译器 IL代码到本地指令。
CLR的特点
被管理的多线程支持和线程监控。应用程序域包括一个或多个执行线程。
管理不安全代码的互用性,和COM配置。
结构化的异常处理机制
基础架构和被管理执行进程,内存管理和垃圾收集
CLR的结构