.NET简介
1.1 什么是.NET
1.1.1 微软软件开发平台
.NET这个名称涵盖了微软主要的开发平台。这个主题十分广泛,包含了许多规范,如组件的格式、编程语言、标准类和工具等。除了这些规范,微软公司还提供了一套Windows平台的实现。提到.NET,我们说的就是微软最新的软件开发技术,它取代了COM/win32/C++/VB/ASP的时代。
之所以叫.NET这个名称,是因为互联网和一般计算机网络的使用在软件中越来越常见。应用程序越来越倾向于互相连接。基于这个事实,.NET技术提供了许多方便的功能用于应用程序之间的通信,这将在第22章和第24章进行介绍。为了在多种多样的实践场合提供应用程序互操作的能力,.NET平台本身也在所有级别充分使用XML。
渐渐地,微软的所有产品都开始提供.NET类型的API。比如SQL Server 2005就允许在管理数据的DBMS进程中注入.NET代码。Windows Vista(Windows的下一个版本)的API也部分地提供为.NET类型。名为ASP.NET的Web页面构建技术现在是IIS 7.0 Web服务器的特权功能。Office办公套件现在也提供了一个基于.NET的编程模型以取代过去的VBA模型。
1.1.2 一组规范
.NET平台本身就基于许多规范,有些是由微软以外的其他组织来维护的。这些规范定义了诸如C#、VB.NET和IL这样的语言,还定义了数据交换协议,比如SOAP格式。这些规范还有一些尚在完善过程中的其他实现。.NET已经可以部分地在其他非微软操作系统上获得支持。与C时代、C++时代与Java时代相比而言,.NET开启了软件开发的新时代。有趣的是这种新时代的接替是周期性发生的,大约每7年一次。每次新时代的到来,都伴随着开发人员效率的提升,因为引入的新观念及新应用程序都更加人性化;此外由于硬件性能的提升,新的技术也能处理更多数据。这样一来整个行业采用这些新技术来开发软件就能在提供更好质量的同时降低开发的成本。
1.1.3 .NET概览
.NET技术主要是由以下3个部分组成的:
q 一组可扩展的开发语言,包括C#和VB.NET。这些语言必须遵守一个名为CLS(公共语言规范,Common Language Specification)的规范。
q 一组可以在这些语言所开发的程序中使用的基类。我们有时使用BCL(基类库,Base Class Library)这种简称来代表这些类。本书则统称为.NET Framework的东西。
q 遵守一种称为CLI(公共语言基础设施,Common Language Infrastructure)规范的软件层。这个软件层只能识别一种名为IL(中间语言,Intermediate Language)的语言。该软件层负责在应用程序的执行期间将IL代码编译为机器语言代码。因此,所有.NET支持的语言都必须提供一个产生IL代码的编译器。微软所提供的CLI实现称为CLR(公共语言运行库,Common Language Runtime)。
除了这3个部分之外,还有一些方便.NET应用程序开发的工具。例如Visual Studio,它是一个IDE(集成开发环境,Integrated Development Environment),可以在其中使用C#、VB.NET和C++/CLI等语言。这些工具的完整列表可以在MSDN一篇名为.NET Framework Tools的文章中找到。大部分工具在本书中都介绍了,并且列举在附录D
1.2 发展历程
1.2.1 过去
早在1998年,负责开发MTS(Microsoft Transaction Server)产品的团队就希望开发一种新产品,以解决COM技术的一些问题。这些问题主要是COM和底层操作系统的强耦合造成的,此外,COM技术在使用上,特别是在部署和维护层面上太过于复杂。
而同时,Java在软件开发领域受到青睐。越来越多的企业被虚拟机这个概念所吸引,它允许应用程序无需改动就可以直接在大多数系统上执行。此外,Java中的类远比MFC(Microsoft Foundation Class)的类更容易使用,由于不使用指针,极大地提高了开发人员的生产力。到了2000年6月,微软宣布正在开发一项新技术,其中包含一种名为C#的新语言。2002年2月13日,微软正式发布了.NET的第一个可用版本。这个事件在微软的历史上有决定性的意义,同时也对整个软件开发界产生了深远的影响。
在所有参与此项目的工程师中,我们要特别提到Anders Hejlsberg,他原是Borland公司的创始人之一。这个丹麦籍的工程师曾经设计了Turbo Pascal和Delphi语言,他于1996年加盟微软并参与开发了WFC,这是一个用于微软Java虚拟机的类库。很快,他就开始参与设计今天为人们所熟知的CLR和C#语言。
.NET的1.1版于2003年3月发布。这个版本包含了更多关于数据提供程序(Oracle和ODBC)、安全性(密码学)、IPv6技术以及XML/XSLT技术的类。.NET 1.1还包含了用于开发基于Windows CE(用于Pocket PC、智能电话等)的应用程序的工具。而且.NET Framework 1.1版还包括J#语言,旨在帮助Java开发人员过渡到.NET。
1.2.2 现在
2005年底,微软发布了.NET的2.0版本,这就是本书的主题。在这个版本里,基类型的数量翻了一番,覆盖了许多.NET 1.x忽略的方面。无论从应用程序的执行还是编程语言的支持来看,虚拟机都得到了增强和优化。附录B列举了所有本书涉及的新增功能。
开发工具,包括最重要的Visual Studio,变得更复杂但是更加人性化了。现今普遍认为工具的质量在软件开发平台的评估中占重要地位。
同样,我们看到两种来自其他开发平台的软件开发思想开始出现在.NET中,它们就是极限编程(eXtreme Programming,XP)和基于模型的开发。
XP致力于协调所有参与方的活动,以求用更合理的方法建立一个信息系统。其想法就是有效地面对软件开发过程中不可避免的未预期变更。为了达到这样的目的,我们有时采用一种敏捷(agile)开发方法。这里的敏捷性来自于一定的约束条件。开发时首先需要经常并定期地向客户提供可测试的版本,并听取客户的意见。还应当使用各种灵活的工具促进开发团队的成员交流和共享信息,这些工具每一种都具有特定的功能。XP的中心是人。还有一些其他的原则也十分重要,比如要求定期运行一组自动测试来尽早发现回归和bug。这样一组测试一般是在整个应用程序最近资源的一次完整的编译之后执行。“每日构建(daily build)”这个概念暗示这样的编译每天应该进行一次,一般应该在夜间进行。所有这些想法都能够很容易实现,这归功于Visual Studio 2005的新的Team System组件。
基于模型的开发则致力于从模型自动生成应用程序的代码。这种模型是用一种高级的语言来表达的,特别适用于应用程序所需的功能,所以表达能力很强。这里说的语言称作DSL(Domain Specific Language)。基于模型开发的好处是能让团队依据规范进行源代码开发,减少求精周期的次数,也降低了代码的复杂性。Visual Studio 2005提供了专用于DSL概念和应用的扩展。这些扩展允许用类似于UML的图来表示C#或VB.NET源代码。
1.2.3 未来
微软在2006年发布了Windows Vista。这给.NET平台带来前所未有的决定性变化,.NET执行环境成为操作系统的一部分。Windows Vista提供了很多新的.NET类型,允许从.NET代码直接访问操作系统的功能。它们被总称为.NET 3.0。其中我们应该提一下新的图形应用程序框架,称作WPF(Windows Presentation Framework),还有新的分布式应用程序框架,称作WCF(Windows Communication Framework),后者将在24.11节简要介绍。
2007年年底也可能在2008年,微软会推出Visual Studio 2008(代号为Orcas)。这个版本将主要集中在Visual Studio和.NET Framework与Windows Vista所引入的技术的高度集成上。3.0版本编程语言的工作重点是建立一个框架,在这个框架之下语言可以增加一种专门用于书写数据源(对象、关系型数据和XML)查询的功能。这些查询中会嵌入Lambda表达式,它与C# 2.0的匿名方法功能类似但更加实用。计划中的其他新增功能包括匿名类型、变量的隐含类型以及更高效的对象及数组初始化语法等。
三四年之后,微软将会推出.NET 4.0版本(代码名称为Hawaii),目前还有没有更多信息透露。
1.3 微软和Windows以外的.NET
1.3.1 ECMA组织与.NET
2000年10月,微软、英特尔及惠普共同向ECMA(欧洲计算机制造协会)递交了.NET的一个子集的标准化请求。这个子集包括C#编程语言及CLI。ECMA接受了这个请求并为完善该标准建立了技术委员会。
这意味着微软不再拥有C#及CLI的完整所有权,实际上这个雷德蒙市的巨人一直默许其他组织实现这些规范。如希望了解更多信息或者获取这些规范的官方发行版,请查询以下URL:
http://www.ecma-international.org/
http://www.msdn.microsoft.com/net/ecma/
http://www.ecma-international.org/publications/standards/Ecma-334.htm (C# 2.0规范)
http://www.ecma-international.org/publications/standards/Ecma-335.htm (CLI规范)
1.3.2 W3C联盟
2000年5月9日,微软和另外10家公司,包括IBM、惠普、康柏和SAP等共同向W3C联盟提交了维护SOAP标准的请求。SOAP标准定义了一种基于XML的消息格式。Web服务可以使用SOAP消息来互相通信。将这种格式标准化的目的是让Web服务完全独立于平台或企业。24.7节将详细介绍SOAP格式。欲知详情,请访问http://www.w3.org/TR/SOAP。
从那时起,就有一定数量的旨在扩展Web服务功能的规范被提交到了W3C。目前已经实现了一些规范,而另外一些仍然未决(参见24.1.2节与24.10节)。
1.3.3 Mono项目
2001年7月9日,由Miguel de Icaza建立的Ximian公司宣布开发一种开放源代码的.NET实现。开发此项目的原因之一是他们的工程师认为.NET代表了当前最佳的软件开发技术。该项目的名称是Mono。
2003年中期,Novell公司收购了Ximian并接管了Mono项目。2004年6月30日,该项目的1.0版本正式发布。Mono很快就会支持2.0版的.NET和C#。
Mono项目包括一个C#编译器(基于GPL协议发布),.NET大部分类库的实现(基于MIT/X11协议发布)和一个实现CLI的虚拟机(基于LGPL协议发布)。所有这些在Windows、Linux和其他基于UNIX的操作系统(如Mac OS X等)下都是兼容的。该项目的主页为http://www.mono-project.com。
尽管Mono项目可能对微软的商业版本.NET构成威胁,但微软却没有必要反对这项尝试。微软的.NET经理John Montgomery说:“……Ximian所做的工作是非常棒的。这是对我们现有工作的验证,也同时肯定了我们的标准化活动。而且,它也把许多开放源代码社区的目光吸引到.NET上来,这正是我们看重的……”。这个软件巨人似乎已经默许了开放源代码世界具有使用.NET的机会。这表明围绕.NET开发的产品会有更多潜在的客户。
1.3.4 微软SSCLI项目
微软的Share Source CLI项目(也称SSCLI或Rotor)致力于公开实现CLI和实现.NET Framework特定部分的源代码。SSCLI项目的发布更注重学术研究的目的,旨在帮助学生和研究人员了解和研究现代虚拟机的内部机制(GC、JIT编译等)。不过你也可以使用这些代码来理解.NET的内部工作原理或调试应用程序,但它不能用于商业目的。
SSCLI包含了数百万行源代码、一个C#编译器、一个JScript编译器和几个工具。该项目的2.0版也在.NET 2发布后不久即将发布。.NET Framework的中心部分(如XML和.NET Remoting等)都获得支持,但是许多其他重要的部分(如ADO.NET、ASP.NET和Windows Forms)都没有在SSCLI中实现。
与微软的商业版本.NET不同,SSCLI可以运行在数个非Windows操作系统上。目前,SSCLI可以运行的操作系统有FreeBSD、Mac OS X和Windows。这能得以实现是因为SSCLI并不直接调用Win32 API。它使用的是一个接近Win32的名为PAL(平台抽象层,Platform Abstraction Layer)的API。
该项目的官方主页为http://msdn.microsoft.com/net/sscli。
你还可以直接在线浏览SSCLI的源文件:http://dotnet.di.unipi.it/SharedSourceCli.aspx。
1.4 .NET资源链接
我们提供几个与.NET开发有关的主要站点。随着时间的推移,我计划在我的站点http://www. smacchia.com和http://www.PracticalDOT.net/上提供更多有关.NET开发资源的链接。
1.4.1 网站
下面是一些与.NET相关的主要网站:
http://www.msdn.microsoft.com
http://www.gotdotnet.com
http://msdn.microsoft.com/msdnmag
http://www.theserverside.net
http://www.dotnet247.com
http://www.15seconds.com
http://www.codeproject.com
http://www.eggheadcafe.com
http://www.devx.com
http://channel9.msdn.com
http://dotnet.sys-con.com
http://dotnet.oreilly.com http://www.ondotnet.com
http://www.dotmugs.ch
http://www.asp.net
http://www.grimes.demon.co.uk
http://dotnetjunkies.com
http://www.codeguru.com
http://www.franklins.net
http://www.c-sharpcorner.com http://www.csharp-corner.com
http://www.devhood.com
http://www.developer.com
http://www.4guysfromrolla.com (ASP.NET)
http://www.idesign.net 的下载部分
1.4.2 新闻组
服务器为msnews.microsoft.com:
microsoft.public.dotnet.framework
microsoft.public.dotnet.framework.adonet
microsoft.public.dotnet.framework.aspnet
microsoft.public.dotnet.framework.clr
microsoft.public.dotnet.framework.performance
microsoft.public.dotnet.framework.remoting
microsoft.public.dotnet.framework.sdk
microsoft.public.dotnet.framework.webservices
microsoft.public.dotnet.general
microsoft.public.dotnet.languages.csharp
1.4.3 博客
最后列出一些关于使用.NET技术进行软件开发的博客,其中提供了大量非常有用的信息:
Aaron Skonnard(XML)http://pluralsight.com/blogs/aaron/default.aspx
BCL Team http://blogs.msdn.com/bclteam/
Bart De Smet(多种技术)http://blogs.bartdesmet.net/bart/
Benjamin Mitchell(Web服务,极限编程)http://benjaminm.net/
Bertrand Le Roy(ASP.NET)http://weblogs.asp.net/bleroy/
Bob Beauchemin(ADO.NET SQL Server