1.2 .NET Framework 3.5介绍
Visual Studio 2008与Visual Studio 2005相比,采用的框架为3.5版本。.NET Framework 3.5版是在2.0和3.0版及其Service Pack的基础上构建的。.NET Framework 3.5 Service Pack 1更新了3.5版程序集,并包含2.0和3.0版的新Service Pack。
1. .NET Framework的两个主要组件——公共语言运行库和.NET Framework类库
公共语言运行库是.NET Framework的基础。可以将运行库看做一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全检查以提高代码的安全性、可靠性和准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI)应用程序,也包括基于ASP.NET所提供的最新创新的应用程序(如Web窗体和XMLWeb Services)。
如图1-12 所示为公共语言运行库和类库与应用程序之间,以及与整个系统之间的关系。该图还显示了托管代码如何在更大的结构内运行。
图1-12 公共语言运行库和类库与应用程序之间,以及与整个系统之间的关系
2. 使用.NET平台的优点
(1)Microsoft.NET XML Web服务,不是一个单一的程序。这些Web服务易于编程和调试,彼此之间相互独立,通过XML Message进行通信及合作。
(2)Microsoft.NET减少了程序员要写的代码量。一个XML Web服务能适用于所有的设备,不必再去为每一个设备编写一个不同的版本。另外,将显示特性与.NET体验分开,以便以后加入新的接口技术。
(3)Microsoft.NET开创了全新的商业模型,它使得一个公司可以用多种方法来把自己的技术商品化。技术提供商可以把他们现有的软件包转变为XML Web服务,并把这些服务出售给需要这些功能的第三方,或供给.NET体验提供商,用以构建新的软件包。
(4)Microsoft.NET允许IT部门使用其他提供商的XML Web服务,减少内部研发的工作量。它能记住用户的个人设置,并在适当的时候,向用户使用的智能设备发送适当的数据。
1.2.1 公共语言运行库
公共语言运行库的功能通过编译器和工具公开,可以编写利用此托管执行环境的代码。使用基于公共语言运行库的语言编译器开发的代码称为托管代码。托管代码具有许多优点,如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
若要使公共语言运行库能够向托管代码提供服务,语言编译器必须生成一些元数据来描述代码中的类型、成员和引用。元数据与代码一起存储;每个可加载的公共语言运行库可移植执行(PE)文件都包含元数据。公共语言运行库可使用元数据来完成查找和加载类、在内存中安排实例、解析方法调用、生成本机代码、强制安全性,以及设置运行时上下文边界等任务。
公共语言运行库会自动处理对象布局并管理对象引用,当不再使用对象时可释放它们。按这种方式实现生存期管理的对象称为托管数据。垃圾回收消除了内存泄漏及其他一些常见的编程错误。如果编写的代码是托管代码,则可以在 .NET Framework应用程序中使用托管数据、非托管数据,或者同时使用这两种数据。由于语言编译器会提供自己的类型(如基元类型),因此可能并不总是知道(或需要知道)这些数据是否是托管的。
有了公共语言运行库,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法,还可以将一个类的实例传递到用不同的语言编写的另一个类的方法中。这种跨语言集成之所以成为可能,是因为基于公共语言运行库的语言编译器和工具使用由公共语言运行库定义的通用类型系统,而且它们遵循公共语言运行库关于定义新类型,以及创建、使用、保持和绑定到类型的规则。
最后,运行库可由高性能的服务器端应用程序承载,如Microsoft SQL Server和Internet信息服务(IIS)。此基础结构在享受支持运行库宿主的行业最佳企业服务器的优越性能的同时,能够使用托管代码编写业务逻辑。
1.2.2 .NET Framework类库
.NET Framework类库是一个由Windows软件开发工具包(SDK)中包含的类、接口和值类型组成的库。该库提供对系统功能的访问,是建立 .NET Framework应用程序、组件和控件的基础。
.NET Framework类型是生成.NET应用程序、组件和控件的基础。它包括可加快和优化开发过程并提供对系统功能的访问的类、接口和值类型。为了便于语言之间进行交互操作,大多数.NET Framework类型都符合公共语言规范(CLS),因而可在编译器符合CLS的任何编程语言中使用。
.NET Framework提供了一组丰富的接口,以及抽象类和具体(非抽象)类。.NET Framework包括的类型可执行下列功能。
● 表示基础数据类型和异常。
● 封装数据结构。
● 执行I/O。
● 访问关于加载类型的信息。
● 调用.NET Framework安全检查。
● 提供数据访问、多客户端GUI和服务器控制的客户端GUI。
可以按原样使用这些具体的类,或者在多数情况下从这些类派生自己的类。若要使用接口的功能,既可以创建实现接口的类,也可以从某个实现接口的.NET Framework类中派生类。
1.2.3 程序集
传统的程序开发环境使用进程边界来隔离在同一台计算机上运行的应用程序。每一个应用程序被加载到单独的进程中,这样就将该应用程序与在同一台计算机上运行的其他应用程序相隔离了。隔离这些应用程序的原因在于内存地址是与进程相关的。在目标进程中,不能通过任何有意义的方式使用从一个进程传递到另一个进程的内存指针。此外,不能在两个进程间进行直接调用。
.NET Framework程序集提供了一个更安全、用途更广的处理单元,公共语言运行库可使用该单元提供应用程序之间的隔离。可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个程序集,而不会造成进程间调用或进程间切换等方面的额外开销。
一个程序集由两部分组成,即中间语言和元数据。
(1)中间语言:包含了程序的可执行部分。中间语言与编译器的第一遍输出类似,由于还没有被转换成计算机处理器能识别的二进制格式,因此它还不可以在计算机上直接执行。中间语言必须由编译器进行最后一遍编译,该编译器是.NET框架的一部分。
(2)元数据:描述了程序集的内容。通过将元数据嵌入每个程序集中,任何程序集都可以实现完全的自描述,从而简化了发布使用较旧技术的组件时所需进行的工作。.NET框架使用元数据省略组件的注册过程。每个程序集都在元数据中包含了对其他程序集的引用信息,使得运行库可以通过一种灵活的方法来绑定多个程序集。
公共语言运行库加载某个应用程序时,会检查该应用程序的元数据,从而判断在执行时需要哪种外部数据集。
有以下两种类型的数据集。
(1)私有程序集。仅由单个应用程序使用,通常与使用它们的应用程序保存于同一目录下。使用程序集时应首选此方法。因为私有的程序集不需要与其他的应用程序共享,所有更新或替换私有程序集的操作不会影响其他的应用程序,相对比较容易。
(2)共享程序集。通常由多个应用程序共同使用,共享程序集布局有运行库所附加的一些约束,并且必须遵循命名和版本控制规则。