.Net框架

一,概述

.NET框架(.NET Framework,۰net,▪net)是微软公司继 Windows DNA 之后的新开发平台,实际上就是一组用于建立Web服务器程序或Windows桌面应用程序等的软件组件。.NET框架是以一种采用系统虚拟机运行的编程平台,以公共语言运行时(Common Language Runtime)为基础,支持多种语言(C#、VB.NET、C++、Python等)的开发。

以往的程序设计人员,要么利用Visual C++的MFC(Microsoft Foundation Classes),要么通过Visual Basic APIs(Application Programming Interfaces)来开发项目,没有统一的标准,没有共同的开发结构。为了满足不同项目的开发需求,程序设计人员得不断地学习各种语言的开发结构,而不能专注于程序本身上的设计。.NET Framework的出现则改变了这种混乱的局面,

.NET是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌上型软件工程迈出的第一步。NET 包含许多有助于互联网和内部网应用迅捷开发的技术。

  • .NET Framework结合了微软当前所有的开发结构,让程序设计人员能够利用C#等中间语言来编写程序,这类中间语言和其他编程语言的函数库、使用方式、类及名称都相同。因此,设计人员可以专注于程序算法上的设计,而避免奔波于不同语言的学习。

  • .NET Framework通过建立一个可以跨不同编程语言的APIs(Application Programming Interfaces),从而能够在不同编程语言间进行连接、错误处理及编程调试(Debug)工作。通过该平台,程序设计人员可以将开发好的编程,顺利移植到不同的平台上进行运行,还可以转化成为网络服务等。这些革新使得程序设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务(web服务)的开发。

  • .NET Framework以微软的Component Object Model(COM)作为基础,并且利用更活动的运算方式将所有组件结合在一起,高效能的网页组件体系简化了编程工作,具有更好的安全性。

Sun公司的Java 编程语言和Java平台,企业版技术是.NET平台的竞争对手之一,它们有很多概念也是互通的。

二,版本历史

1998年底,因为COM只提供二进制层面的统一,而无法描述类型信息和工具支持信息。微软借鉴Java而提出用“元数据”来克服该缺点,并放入到组件当中成为CLR(Common Language Runtime,公共语言运行时,新一代COM虚拟机)。而在该虚拟机CLR上运行的类型系统和指令集等语言规范就是CLI(Common Language Infrastructure,公共语言基础设施)。同时,微软开发了CLI的一个实现,这就是大名鼎鼎的.NET了。

MS在1990年代开始开发.NET框架,开发名为NGWS(Next Generation Windows Services)。于2000年末发布了.NET 1.0 beta版。

版本

完整版本号

发布日期

对应Visual Studio

对应Windows

说明

1.0

1.0.3705.0

2002-02-13

VS .NET(2002)

最初的 .NET 构架,它可以以一个独立的可重新分发的包的形式或在一个软件开发工具包集中被获得。是VS.NET的发行版的一部分

1.1

1.1.4322.573

2003-04-24

VS.NET 2003

Win Server 2003

首个被Windows Server 2003所内置的.NET框架版本,改进了安全性和大量API,内建对mobile ASP.NET、ODBC和Oracle数据库、IPv6的支持,发布.NET Compact Framework

2.0

2.0.50727.42

2005-11-07

VS 2005

组件都包含在 VS2005和SQLServer2005里面,大量变更的新的 API 让需要管理.NET 运行库实例的非 .NET 的应用程序可以做到这点。推高SQLServer在.NET下的效率

3.0

3.0.4506.30

2006-11-06

Vista, Win Server 2008

曾用名WinFX,依然使用.NET Framework 2.0版本的公共语言运行库(CLR),并加入了适应未来软件开发方向的4个框架:WPF/E.WCF,WF。Windows CardSpace

3.5

3.5.21022.8

2007-11-19

VS 2008

Win 7, Win Server 2008 R2

自动包含.NET 2.0 SP1和3.0 SP1,增强了安全性修复,新增少量类库,提供新编译器,支持语言整合查询LINQ,扩展方法属性,表达式目录树

4 RC

2010-02-10

VS 2010

主要增加了并行支持,目前处于 Beta 1 测试版本,随 VS2010 Beta 1共同发布。

http://www.deepcast.net/wiki/dotnet%E6%A1%86%E6%9E%B6?tab_details=view&image=dotnetsvg.jpg&ns=&do=media

更详细的版本号参见.NET Framework version list

.NET_Framework_3.0包含:

  • Windows Presentation Foundation(WPF):提供更佳的用户体验,用来开发Windows Forms程序以及浏览器应用程序(参见WPF/E).

  • Windows Communication Foundation(WCF):提供SOA(面向服务的软件构架)支持的安全的网络服务(Web Service)框架。

  • Windows Workflow Foundation(WF): 提供一个设计与发展工作流程导向(Workflow-oriented)应用程序基础支持的应用程序接口。

  • Windows CardSpace:提供一个SSO的解决方案,每个使用者都有各自的 CardSpace。

NET Framework 3.5 自动包含 .NET Framework 2.0 SP1 以及 .NET Framework 3.0 SP1,用于为这两个版本提供安全性修复,以及少量新增的类库(如 System.DateTimeOffest),此版本提供的新功能有:

  • 扩展方法(Extension Method)属性(Attribute),用于为扩展方法提供支持

  • LINQ 支持,包括 LINQ to Object、LINQ to ADO.NET 以及 LINQ to XML

  • 表达式目录树(Expression Tree),用于为 Lambda 表达式 提供支持

  • 与语言集成查询 (LINQ) 和数据感知紧密集成。借助这个新功能,您可以使用相同的语法,在任何支持 LINQ 的语言中编写相关代码,以筛选和枚举多种类型的SQL 数据、集合、XML 和数据集,以及创建它们的投影。

  • 利用 ASP.NET AJAX 可以创建更有效、更具交互性、高度个性化的 Web 体验,这些体验在所有最流行的浏览器上都能实现。

  • 用于生成 WCF 服务的全新 Web 协议支持,包括 AJAX、JSON、REST、POX、RSS、ATOM 和若干新的 WS-* 标准。

  • Visual Studio 2008 中面向 WF、WCF 和 WPF 的完整工具支持,其中包括支持工作流的服务这一新技术。

  • .NET Framework 3.5 基类库 (BCL) 中的新类可满足许多常见的客户请求。

.NET Framework 3.5 SP1 自动包含 .NET 2.0 SP2 以及 .NET 3.0 SP2。该版本随Visual Studio 2008 SP1 发布,此版本提供了下列的新功能:

  • 新增的 ASP.NET 功能包括 ASP.NET 动态数据和 ASP.NET AJAX 附加功能,前者提供了无需编写代码就可实现数据驱动的快速开发的丰富支架框架,后者为管理浏览器历史记录提供了支持(后退按钮支持)。

  • ADO.NET Entity Framework。

  • 对 SQL Server 2008 的数据提供程序支持。

  • .NET Framework 客户端配置文件是完整版 .NET Framework 的子集,面向客户端应用程序。这改善了尚未安装 .NET Framework 的计算机上的安装体验。

  • 改进 Windows Presentation Foundation 的性能,其中包括启动速度的位图效果性能的提高。为 Windows Presentation Foundation 增加的功能包括对业务线应用程序的更好支持、本机闪屏支持、DirectX 像素着色器支持以及新的 WebBrowser 控件。

  • ClickOnce 应用程序发布者可以根据具体情况决定是否取消签名和散列,开发人员可以以编程方式安装显示自定义署名的 ClickOnce 应用程序,ClickOnce 错误对话框支持指向网络上特定于应用程序的支持站点的链接。

  • 用于 SQL Server 的 .NET Framework 数据提供程序 (System.Data.SqlClient) 完全支持 SQL Server 2008 数据库引擎的所有新功能。有关 .NET Framework 对 SQL Server 2008 的支持的更多信息,请参见 SQL Server 中的新功能 (ADO.NET)。ADO.NET 数据平台是一种多版本策略,它使开发人员能够针对概念性实体数据模型进行编程,从而减轻他们的编码和维护工作。此平台提供了 ADO.NET Entity Framework、实体数据模型 (EDM)、对象服务、LINQ to Entities、Entity SQL、EntityClient、ADO.NET 数据服务及实体数据模型工具。

  • Windows Communication Foundation 现在提供了改进的互操作性支持,增强了部分信任方案中的调试体验,并扩展了整合协议支持以更广泛地应用于 Web 2.0 应用程序,从而使 DataContract 序列化程序更易于使用。

  • Microsoft.VisualBasic.PowerPacks 命名空间引入了新的 DataRepeater 控件,该控件以可自定义的列表格式显示数据。此命名空间还包含新的矢量形状。

标准化和版权

2000年8月,微软、惠普和英特尔共同制定CLI和C#程序语言的标准规格。2001年12月,以上两者通过并成为ECMA标准规格。(ECMA 335和ECMA 334)。ISO亦于2003年4月跟随(ISO/IEC 23271和ISO/IEC 23270)。

这会有一定的风险,但它可以鼓励标准联合的实现,以提供一座桥梁来把非Windows的软件转变为微软.NET。将此推广为标准的一个团体是国际.NET联合会(INETA)。

尽管微软及其它合作伙伴持有CLI及C#的专利,ECMA和ISO要求所有专利都应该遵守“合理与非歧视准则”。除此之外,这些公司亦同意让使用者免费使用这两项专利。

不过,这并不包括.NET Framework内并不为ECMA/ISO标准涵盖的范围,这包括了:Windows Forms、ADO.NET及ASP.NET。微软对上述部件所持有的专利,使开发者未必能够为非微软平台开发出一套完整的作品。

.NET Framework类库

正如我们前面介绍的,类是面向对象设计语言中非常重要的部分,好比是工业流水线上的模具,按照这些类就可以实例化为对象,在程序中直接使用。.NET Framework中的类库提供了如此丰富的类,使得开发程序十分简单。诸如字符串处理、数据收集、数据库连接,以及文件访问等任务,在.NET Framework中都提供了完善的类可以直接使用。 图1-14中左边部分显示的是基于.NET Framework开发的托管代码的常见应用形式:  有的程序没有自己定义的类,也不使用.NET Framework提供的类库的类,所以直接和CLR打交道,再在操作系统支持下运行。  有的程序没有自己定义的类,使用.NET Framework提供的类库的类,然后和CLR打交道,再在操作系统支持下运行。  有的程序有自己定义的类,但不使用.NET Framework提供的类库的类,然后和CLR打交道,再在操作系统支持下运行。  有的程序有自己定义的类,使用.NET Framework提供的类库的类,然后和CLR打交道,再在操作系统支持下运行。 提示:.NET的托管代码都必须使用CLR,至于类库则不一定。但实践中很少有不使用类库的程序。 .NET Framework类库在.NET Framework中的位置可以用图1-15来表示。

三,CLR 与 CLI

CLR的主要功能是完成管理内存、线程执行、代码执行、代码安全验证、编译,以及其他系统服务。CLR的体系结构如图1-16所示。 CLR中一个非常重要的组成部分是通用语言系统CLS。通过CLS,不同的编程语言的数据类型被转换为标准数据类型。 CLR可以提高开发人员的工作效率。例如,程序员可以用他们选择的开发语言编写应用程序,却仍能充分利用其他开发人员用其他语言编写的运行库、类库和组件。 http://www.deepcast.net/wiki/dotnet%E6%A1%86%E6%9E%B6?tab_details=view&image=clr.gif&ns=&do=media

CLI运作图

.NET的初级组成是CLI和CLR。CLI是一套运作环境说明,包括一般系统、基础类库和与机器无关的中间代码,全称为通用中间语言(CIL)。CLR则是确认操作密码符合CLI的平台。在CIL执行前,CLR必须将指令及时编译转换成原始机械码。

所有CIL都可经由.NET自我表述。CLR检查元数据以确保正确的方法被调用。元数据通常是由语言编译器生成的,但开发人员也可以通过使用客户属性创建他们自己的元数据。

如果一种语言实现生成了CLI,它也可以通过使用CLR被调用,这样它就可以与任何其它.NET语言生成的数据相交互。CLR也被设计为操作系统无关性。

当一个汇编体被加载时,CLR执行各种各样的测试。其中的两个测试是确认与核查。在确认的时候,CLR检查汇编体是否包含有效的元数据和CIL,并且检查内部表的正确性。核查则不那么精确。核查机制检查代码是否会执行一些“不安全”的操作。核查所使用的算法非常保守,导致有时一些“安全”的代码也通不过核查。不安全的代码只有在汇编体拥有“跳过核查”许可的情况下才会被执行,通常这意味着代码是安装在本机上的。

通过.NET,你可以用SOAP和不同的web服务进行交互

.NET vs. Java EE

公共语言基础(CLI),通用中间语言(CIL)以及 C# 与 Sun 的 Java 虚拟机和 Java 之间有不少的相似之处,因此它们无疑是强烈的竞争者。它们两者都使用它们各自的中间码(在微软,它们叫做通用中间语言,而在 Sun,它们叫字节码)。通用中间语言被设计来实时编译(JIT),而 Java 的字节码在最初的时候则是设计成用于解释运行,而非实时编译。.NET 现在只在 Windows 上被完美地支持,而 Java 则可在很多平台上被完好支持。然而,现在一些正在开发中的实现版本例如Mono或者Shared source CLI可以用于在类 Unix 操作系统例如Linux,FreeBSD和Mac OS X上运行 .NET 应用程序。Sun 的一个产品,J2EE提供与微软的一些捆绑于 Windows 中的技术例如COM+(先前的MTS)和MSMQ等效的功能。

Java和.NET可经由IKVM,一个在.NET平台上实作的Java虚拟机作更多的沟通。

Java有其专门的远程程序呼叫技术RMI(Remote Method Invocation), RMI的另一版本RMI-IIOP更可兼容CORBA。

.NET vs. COM

不要将网域名称中的.com、.net与这里的COM、.NET混淆在一起。

前一版软件组件技术由 Microsoft 所提出的 COM,该技术被用来建立大型(large-scale)的软件系统上,使用 COM+ 或 MTS 对于传统分布式组件有强化的作用。当 .NET 将 COM-objects 封装成 .NET 组件以及将.NET 组件封装成 COM-objects 后,Microsoft 分别将他命名为 Runtime Callable Wrapper(RCW)和 COM Callable Wrapper (CCW)。很明显的,Microsoft 最终将以 .NET 全面取代 COM 成为软件组件的架构。Microsoft 希望开发者能够在 Win32 平台上使用 .Net 取代 COM,而已经存在的服务则透过抽象接口来使用(如:目前交易的 .Net 组件仍然使用 COM+)。

企业基础 .NET提供开发软件的独立平台,内建高度安全的网络系统,相当倚重软件组件以及组件导向程序。在这方面它完全取代前者(COM)

.Net Remoting & XML WebServices

.NET remoting 属于行程(process)内沟通的抽象方法。 Microsoft® .NET Remoting提供一个丰富可扩充的框架给存在两个不同 AppDomain 中的 Object,使得在不同行程(行程)和不同机器中能够进行无缝地沟通。.NET Remoting 提供一种强大但简单的可程序化模型并且在执行阶段支持数据交换。

XML Web services 将基础的功能区块布署到网络的不同计算机上。开放标准的通讯协议以及人和应用程序可以透过 Web Services 整合应用程序的环境来合作。应用程序可以从不同的来源使用多个XML Web Services 来建构应用程序而不需要知道他们在哪里以及如何来运作。

.NET 的语言

CLI被设计成支持任何对象导向的程序语言,分享共同对象模型与大型共同类别库。.NET支持超过40种程序语言。这些编译器大都是免费的(厂商卖的是IDEs)。

大部分的语言都做了重大改变以搭配.NET Framework。厂商通常利用这个机会来同时改变语言的其它特性。

微软开发的.NET平台编程语言

  • C#,一个以C++和Java语法为基础开发的一个全新的对象导向语言,是.NET开发的首选语言。

  • Visual Basic .NET,一个加强了对象导向支持的,支持多线程的Visual Basic版本。

  • C++/CLI,一个C++的 .NET 平台版本变种。

  • JScript .NET,一个编译版本的 MicrosoftJScript语言。

  • J#,一个对应于Java和 J++(微软自己开发的Java变种)的 .NET 平台版本,但是有由于知识产权,目前微软公司已经停止其开发应用。

  • F#,ML语言家族的一员。

第三方使用 .NET 的编程语言

  • Ada,参阅A#。

  • APL

  • Boo,基于Python。

  • COBOL

  • Component Pascal,基于部件的 Pascal,比起Pascal来更接近于Oberon。

  • Delphi 8 and Delphi 2005

  • Eiffel

  • Forth

  • FORTRAN

  • IKVM,Java。

  • IronPython,基于Python。

  • Lexico,基于西班牙语的面向对象编程语言。

  • Lisp

  • Mercury

  • Mondrian为了便于脚本部件编程而开发的功能型语言。

  • Nemerle函数式/指令式混合语言。

  • Oberon

  • Perl

  • Python

  • PHP

  • RPG

  • Ruby

  • Smalltalk

  • Tcl

ASP.NET & ADO.NET

ASP.NET 是内含于 .NET Framework 中,专门用来发展 Web 应用程序的一组类别库集。 主条目:ADO.NET

ADO.NET 是内含于 .NET Framework 中,专门处理与数据来源沟通的数据存取类别库集,被 Windows Forms 与 ASP.NET 应用程序大量使用,可说是 .NET Framework 中唯一的数据存取接口。

可供选择的实现版本

微软的 .NET Framework 是 .NET 技术的旗舰级实现版本,在此之外还有一些其它实现版本。

  • 微软的Shared Source Common Language Infrastructure是微软的 .NET Framework 的一个源码共享的实现版本。它可运行于Windows XP,FreeBSD,和Mac OS X10.2。

  • Mono是一个开源的 .NET 运行时和开发库实现版本。Mono 现正由Ximian(Novell的一部分)和开源软件开发小区负责开发。它正迅速发展成熟,现已经包含了对 ASP.NET 和 ADO.NET 的支持,同时也正在加强对Windows Forms库的支持。它提供了一个 C# 编译器,而一个 VB.NET 编译器现在也已经处于 pre-beta 阶段。Mono 项目还包含了一些新的库和技术的开发:

  • Gtk:一个GTK+GUI工具包的 .NET 封装。

  • xSP:一个用 C# 编写的支持运行 ASP.NET 应用程序的网页服务器软件。

  • MonoDevelop:SharpDevelop的一个移植版本,是一个符合GPL标准的面向 Gtk# 和 Mono 的 .NET 集成开发环境。

  • Novell.Directory.Ldap 类库:Lightweight Directory Access Protocol(LDAP) for .NET 的一个免费的实现版本。

  • SerialPortNet:Aserial portlibrary for .Net & Mono implementing .NET 2.0 specifications.

  • DotGNUPortable.NET不及 Mono 成熟,这得归咎于 Portable.NET 并不是在最初的时候就使用了微软的开发框架。

参见

你必须知道的.NET| 再读《你必须知道的.NET》|

.NET 3.5 类库海报 和 C# 2008的快捷键海报| 海报。NET框架|

.NET开源数据库的前世和今生(上)|

WCF简易教程|