新版本平台的推出总是伴随着许多压力,以及人们对期待已久功能的兴奋之情。开发者喜欢利用新技术建立应用程序,不过,在将现有的可靠应用程序由旧版本平台移植到最新最完善版本的过程中,总会遇到一些困难。
本周,我来讨论将在ASP.NET 1.1中建立的网络应用程序移植到2.0版本过程中可能出现的一些问题。
ASP.NET 2.0
新版的ASP.NET 2.0不只是一次升级——它是一次重大的技术更新,因为它改变了ASP.NET应用程序的设计、编译及配置方式。微软意识到,现在还存在大量的ASP.NET 1.1程序,因此2.0旨在让旧版应用程序无故障地运行。另一方面,技术升级也产生了将现有应用程序转换到2.0平台的需要。考虑到上述问题,我们来讨论一下这两个版本之间的区别,以及在转换过程中可能会遇到的问题。
版本变化
虽然ASP.NET 2.0针对1.1进行了许多改变,但某些变化对于项目转换有着重大的影响。下面的列表简单概括了一些主要改变:
·代码隐藏模式:ASP.NET 2.0引入了部分类的概念,而一个类能够跨越多个类文件。这是Visual Studio 2005应用的一项主要功能,它将系统生成的代码与用户代码分离开来。这避免了你在阅读源代码时遇到系统生成代码的情况。部分类方法降低了无意编辑系统代码并导致更小的代码隐藏文件的风险。
·目录:ASP.NET 2.0增加了许多特殊的目录,而1.1仅有一个必要的bin目录。这些新目录大都以App_为前缀,如App_Code、App_Date、App_ GlobeResources和App_LocalResources,bin目录依然与一个主题目录一同存在。新增目录是2.0取消项目文件的主要手段。
·删除项目文件:ASP.NET与Visual Studio 2005使用项目文件的日子一去不复返了。项目现在变成了完整的网络项目目录,这与1.1有了很大的不同,并可能引起后面提到的移植问题。
·编译模式:在1.1中,所有的代码被编译到bin目录中的一个集合中。在2.0中,这个集合被分割成几个集合。这些集合可以在空闲时建立,或预先编译。每个ASP.NET目录,如App_Code和App_Data,以及Web Forms、User Controls等都有各自的集合。这是应用程序结构方面的重大变化,它为向用户交付应用程序提供更多配置选项。
·应用程序配置:1.1版应用程序的配置相当简单,你只要移动内容文件以及必要的集合文件,再复制并粘贴就可完成,并没有多少选择的余地。2.0为应用程序配置提供各种选择。例如,你可以选择预先编译代码再配置它;或不预先编译而使用其它方法。另外,你还可以锁定已配置的内容文件,防止在配置后再进行修改(这与1.1有很大不同)。
上表详细说明了ASP.NET 1.1与2.0的主要差异,以及它们对应用程序移植可能造成的影响。现在我们再进一步讨论可能出现的问题。
应用程序转换
上一部分说明的新旧版本间的主要差异为转换应用程序时可能遇到的问题提供了一些线索。下表着重强调在将一个应用程序移植到新的ASP.NET 2.0平台时需要注意的问题:
·在转换前,你必须确定应用程序在1.1中能够正常运行。在一个多功能项目中,在转换前应进行备份。
·2.0中删除了项目文件,这与1.1有很大不同。在2.0中,所有的引用被转移到它们自己的目录中。另外,网络项目文件夹现在变成项目。因此,在2.0中,需要将旧版1.1中有多个地址的项目划分成单独的项目。在转换前必须划分这些项目。
·2.0的新目录结构需要1.1中用到的资源和其它组件,你需要将它们转移到新目录中。
· .NET Framework已由1.1升级到2.0,因此2.0可能不再支持1.1中的一些功能(如类或它们的方法和/或属性)。
转换向导
微软同时考虑到项目转换问题。Visual Studio 2005中包含一个转换向导,帮助你进行项目转换。
在转换前,Visual Studio转换向导首先要求你对现有应用程序进行备份(这是个非常不错的主意)。接下来,它执行转换,并在完成转换后显示一个转换日志。在新版本号中被替代或取消的.NET Framework功能是转换过程中可能出现的常见问题。
列表A中的信息指出,一项功能已被新版本中的另一功能代替,因此我必须手工修改代码。不同的应用程序在转换过程中可能出现各种问题。你需要单独解决每一个问题,做出必要的改变,才能充分利用2.0平台。
逐步转换
不管哪种转换,最好是逐步、有条理地进行。没有必要进行快速转换。ASP.NET 2.0中增加了大量新功能,可以方便地建立强大的解决方案,但当你将旧版ASP.NET 1.1应用程序转换到新平台时,必须考虑到这些改变。记住本文所讨论的这些变化,利用转换向导,一步步地转换到新平台。
Tony Patton拥有丰富的Java、VB、Lotus及XML方面的知识,是一个专业的应用程序开发人员。