引:http://hi.baidu.com/puzi0315/blog/item/bd518f810940c1d4bd3e1e22.html

从.Net Framework 1.0到现在的.Net Framework 4.0,版本在不断升级,那么,这些版本升级了什么东西?在哪些方面进行了增加或者增强?它们之间有什么相同之处和不同之处呢?

  .Net Framework从出现到现在的.Net Framework 4.0,其框架结构没什么大的变化,都是CLR在OS上面,基类库在CLR上面,再之上是ADO.NET,XML等,再之上是asp.net ,window form,最上层就是我们经常用到的各种.Net开发工具了.框架图如下:

 

.net framework 源码 .net framework 原理_CLR

Microsoft .NET Framework由应用程序开发技术、Microsoft .NET Framework 类库、基类库和公共语言运行库(CLR)4个部分组成。这4个部分如图所示,每个较高的层都使用一个或多个较低的层。

1.应用程序开发技术

应用程序开发技术位于框架的最上方,是应用程序开发人员开发的主要对象。它包括ASP .NET技术和WinFroms技术等高级编程技术。

2.Microsoft .NET Framework 类库

Microsoft .NET Framework 类库是一个综合性的类型集合,用于应用程序开发的一些支持性的通用功能。开发人员可以使用它开发多种模式的应用程序,可以是命令行形式,也可以图形界面形式的应用。Microsoft .NET Framework 中主要包括以下类库:数据库访问(ADO .NET等)、XML支持、目录服务(LDAP等)、正则表达式和消息支持。

3.基类库

基类库提供了支持底层操作的一系列通用功能。Microsoft .NET 框架主要覆盖了集合操作、线程支持、代码生成、输入输出(IO)、映射和安全等领域的内容。

4.公共语言运行库(CRL)

公共语言运行库是Microsoft .NET Framework 的基础内容,也是Microsoft .NET程序的运行环境,用于执行和管理任何一种针对Microsoft .NET平台的所有代码。CLR可以为应用程序提供很多核心服务,如内存管理、线程管理和远程处理等,并且还强制实施代码的安全性和可靠性管理。

下面简要介绍Microsoft .NET 框架的一些核心技术特点,以便读者能够更深入地了解 C# 程序后台运行的原理。

(1) 多语言支持。在Microsoft .NET 平台上,所有的语言都是等价的,它们都是基于公共语言运行库(CLR)的运行环境进行编译运行。所有Microsoft .NET 支持的语言,不管是Visual Basic .NET 、Visual C++、C# 还是Jscript .NET,都是平等的。用这种语言编写的代码都被编译成一种中间代码,在公共语言运行库中运行。在技术上这种语言与其他语言相比没有很大的区别,用户可以根据自己熟悉的编程语言进行操作。在本书中使用 C# 进行编程,因为C# 是一种优秀的程序开发语言,它简洁、高效且便于使用。主要用于Microsoft .NET框架中面向组件的领域。

(2) 多平台支持。Microsoft .NET框架的另一个重要特点就是多平台支持。不过相对于 Java 技术能够跨越 UNIX、Linux 和Windows 等众多平台,目前Microsoft .NET 的跨平台性仅限于各种 Windows 操作系统,如Windows 95/98、Windows NT、Windows 2000 和 Windows XP 等。

(3) 性能。Microsoft .NET的基本设计目标之一就是具有强大的性能和可伸缩性。对于 Microsoft .NET 来说,要具备很好的性能要靠公共语言运行库来执行中间代码。为了确保最佳性能,在某种意义上公共语言运行库将所有引用程序代码都编译成本机代码。这种转换既可以在应用程序运行时完成,也可以在应用程序首次安装时完成。

 

有了公共语言运行库,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。还可以将一个类的实例传递到用不同的语言编写的另一个类的方法。这种跨语言集成之所以成为可能,是因为基于公共语言运行库的语言编译器和工具使用由公共语言运行库定义的通用类型系统,而且它们遵循公共语言运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。图1.32列出了各种程序与CLR之间的关系。

.net framework 源码 .net framework 原理_C#_02

公共语言运行库具有以下一些优点。

改进了性能。

能够轻松使用其他语言开发的组件。

类库提供的可扩展类型。

公共语言运行库的执行模型包括以下几种。

将源代码(VB、CS)编译成托管代码块。托管代码块由中间语言和元数据组成。

将托管代码合并成程序集。

加载公共语言运行库

  我们平时用csc.exe 编译器编译后的程序都是MSIL形式的,包括window form和asp.net中的.exe和.dll软件或者组件.这些软件和组件在CLR环境下由CLR环境的JIT编译器编译成本地代码,之后本地代码在CLR托管环境下

运行.CLR负责内存管理,垃圾回收等工作,同时负责与OS通信,包括OS上的其他非托管软件.

何为托管代码和非托管代码?

托管代码是在.NET基础上开发出来的代码,这些代码经编译成MSIL后,在CLR的JIT即时编译后在CLR托管下运行,故这些代码称为托管代码.而没在.NET的基础上开发出来的代码,如C/C++/vb开发出来的COM组件或者API,它们一旦编译后就编译成基于OS的本地代码,它们直接与OS通信,中间没有经过CLR这个中间者,而且内存等管理是手动管理的,此类代码称之为非托管代码.

前面讲的是.Net Framework各版本之间相同之处,即主要框架结构模型是相同的,那么,他们之间的最主要的区别是什么呢?先看看.Net Framework3.0的框架图:

.net framework 源码 .net framework 原理_运行库_03

可以看到,3.0还是用的2.0的基类库和CLR,只不过在2.0的原有asp.net 2.0,window forms2.0技术的基础上增加了WCF,WPF,WWF等新技术,其底层还是和2.0一样,故如果3.0开发编译后的东西没有用到新的基类库的话,一样可以在2.0上运行.

这里需要再说明下CLR的JIT是如何加载编译程序集的.JIT并非所有using引用的程序集都加载编译的,它只加载编译要用到的程序集,故把一个类作为一个类文件编译成一个组件或者说是程序集,比并把几个类写成一个文件编译成一个程序集,可以减少很多的加载编译量,所以最好一个功能,一个类单独写成一个程序集.

.Net 3.5在3.0的基础上对之前功能的增强外,还新增加了几个新技术..NET 3.5并未对.NET 2.0现存的技术进行任何改动,包括ASP.NET、ADO.NET和WinForm在内的主要技术都保持原样,这对熟练掌握.NET 2.0的技术人员是个好消息,他们所掌握的技术仍然很有价值。根据微软.NET平台发展趋势来看,.NET 2.0平台将为.NET 3.5提供基础类库,.NET 3.5将着重引入语法,数据访问和Web客户端上的一些创新。可以把.NET 3.5看做是.NET 2.0的超集,是对.NET 2.0的一次补充。

如果开发者是从.NET 1.0或1.1迁移到3.5,那么需要考虑代码的兼容性问题,尽管.NET框架已经尽力保证向后兼容性,不过由于一些安全方面的改进,仍然有少数重要操作存在不兼容的现象。从.NET 2.0到3.5则完全不存在这个问题,因为.NET Framework 3.5 的所有组件都可在支持 .NET Framework 3.5 的平台上运行。

.NET 3.5还增加了LINQ(语言整合查询)和ASP.NET的OR/M框架(ASP.NET Entity Framework)等新功能。这些新功能增强了VB和C#等语言的作用,为.NET环境提供了OR/M框架,它们都可以和WPF/WCF和WF共同工作,创建强大的应用程序。

net framework 2.0,3.0与3.5三个版本之间关系如下:

.net framework 2.0 = CLR 2.0 + FCL(framework class library)

.net framework 3.0 = .net framework 2.0 + SP1 + WPF + WCF + WF + CardSpace

.net framework 3.5 = ..net framework 3.0 + SP2 + new compiler

这三个版本framework的CLR都是2.0,因此,asp.net的runtime还是只有1.1和2.0,像Linq这些新功能其实只是用新的编译器加上一些新的类库来实现的,3.5版本并没有对CLR做大的升级。

VS2008支持在2.0,3.0和3.5三种版本下开发项目,VS2005的项目可以平稳的升到VS2008上,在VS2008下做VS2005的项目,用的编译器和类库同VS2005都是一样的,但是提供了更好的开发环境。

 

Framework 3 SP1除了修正了一些Framework 2的bug之外,主要的扩展是加了3W框架,分别是WPF,WCF,WWF。F3.5和F3类似,在修正之前的Bug之外,主要的扩展是:LINQ,WF,WCF,Add-in(今后会被MEF替代)。Framework 3.5 SP1,又添了几个新东东:MVC,Dynamic Data,Entity Framework,Data Services等。当然这里面我们也不能忽略了Framework 3在语言上进行的改进,例如Linq,Lambda,扩展函数,var类型的使用等等。

現在看看Framework 4.0又给我们带来了什么?

.NET Framework 4与 Framework 3.5 SP1并行工作。在旧版的Framework中可以运行的应用程序,将继续能够运行在.NET Framework 4上。

在Visual Basic和C #语言中有所创新,例如声明lambdas 、隐线continuations 、动态调度、并命名/可选参数等。

在ADO.NET实体框架中增加了许多新的功能,通过提高抽象层次,从而简化开发人员的关系数据库的程序。这些新功能包括:持续忽略、POCO支持、延迟加载,测试驱动开发的支持、功能模型以及新的LINQ运营商等。

一、以下是ASP.NET中的改进:

改进JavaScript用户界面模板和AJAX中的数据绑定功能;

改进ASP.NET的图表控制;

二、以下是WPF中的改进:

在WPF中增加Windows 7多触控、ribbon控制、任务栏扩展功能支持;

在WPF中增加Surface 2.0 SDK支持;

新的业务线控制,包括图表控制,智能编辑,数据网格,以及其他能够提高“建立数据中心的应用程序”的开发者经验的控制。

提高性能和可扩展性;

在文字、像素布局、本地化和互操作性中添加可视化改进;

三、Windows Workflow(WF)中的改进让开发者能够更好地控制工作流程,具体改进如下:

改善活动规划模型;

改进设计体验;

一个新的流程建模方式;

扩大调色板的活动范围;

工作流程规则一体化;

新邮件相关的功能。

四、.NET框架还为基于WF的工作流程提供重大的性能改进:

改进Windows通讯基础( WCF )构架,例如流服务相关支持,双向通信的持久性等。

.NET框架4还提供了新的WCF功能,例如服务发现、路由器服务、简化配置、REST支持、诊断和性.