ASP.NET 1.x 应用程序与 2.0 应用程序之间最明显的差别就是后者没有项目文件(例如 *.vbproj 或 *.csproj)。在 1.x 应用程序中,项目文件包含生成设置、对外部程序集的引用以及项目中的文件列表。而在 2.0 应用程序中,不再需要版本设置和文件列表,因为 Web 项目目录下的所有文件都被视为 Web 项目的一部分。
•
特殊目录。
ASP.NET 1.x 应用程序具有一个必需的目录 (\bin),用于包含程序集。ASP.NET 2.0 应用程序中则定义了一种更大的目录结构。新目录均以前缀“App_”开头,用于存储资源、程序集、源代码和其他组件。使用这种新的目录结构将不再需要项目文件,并且还可以选用某些新的部署方法。
•
代码分离模式。
在 ASP.NET 1.x 中,代码分离模式使内容(例如 foo.aspx)与代码(例如 foo.aspx.vb)分离。内容页面从代码分离页面继承而来,代码分离页面包含用户和设计器生成的代码。ASP.NET 2.0 通过使用局部类来增强代码分离模式,它允许一个类跨越多个文件。在新的代码分离模式中,内容页面从编译的类继承而来,它由相应的代码分离页面以及自动生成的存根文件组成,存根文件用于为内容页面中使用的控件定义字段声明。此项更改使自动生成的代码与用户的代码分离,并且使代码分离页面显著变小且更加简洁。局部类结构还降低了由于编辑设计器生成的代码而不小心破坏页面的风险。
•
编译模式(一个程序集对多个程序集)。
在 ASP.NET 1.x 中,所有的内容页面、代码分离页面和支持代码都预先编译到具有固定名称的单个程序集中。在 ASP.NET 2.0 中,则即时(默认)创建文件名各不相同的多个程序集。例如,每个 ASPX 页面(由内容页面、代码分离页面和隐藏的设计器页面组成)将被编译到各自的程序集中。App_Code 目录会自动把公共源代码编译到它自己的程序集中。这种新的编译模式使 ASP.NET 应用程序的结构发生了一些变化,但大大丰富了部署方式,以及在 Web 服务器上提供 Web 应用程序的方式。
•
部署方式(预编译、完整编译、可更新站点等)。
在 ASP.NET 1.x 中,Web 应用程序是作为一个大型程序集而预编译和部署的。内容页面(例如 *.aspx)不在服务器上编译,但可以在服务器上编辑。借助新的页面编译模式和目录结构,您就可以使用多种不同的配置来部署 ASP.NET 2.0 应用程序。在一种极端的情况下,您可以预编译所有的 ASPX 页面并部署由完全编译好的程序集组成的 Web 应用程序。在这种模式下,您不能在服务器上轻松地更改该应用程序。在另一种极端情况下,您可以在不预编译任何代码的情况下部署应用程序。在这种配置下,您可以直接在服务器上更改该应用程序中的 .aspx 页面、代码分离文件或其他任何代码。当用户请求服务器上的页面时,页面将被动态编译。
重大的改变
对代码分离文件的更改
在 ASP.NET 1.x 中,通常使用 .aspx 页面和代码分离文件将图形组件与编码组件分开。.aspx 页面是从代码分离文件派生而来的。这意味着您必须声明这两类的所有控件,以便正确绑定回调事件。这种继承关系还引发了有关使两类同步的某些问题,尤其是当开发人员对 .aspx 页面进行了更改(例如,添加一个控件)而没有对代码分离文件进行必要的更改也没有重新编译应用程序时。
在 ASP.NET 2.0 中,由于局部类这一概念的出现,代码分离模式已发生了变化。使用 partial 关键字可以将单个类的代码分隔到两个独立的文件中。代码分离文件定义了一个包含用户代码的局部类。设计器还将生成存根文件,其中包含一个局部类,用于定义 .aspx 页面中使用的控件对应的字段声明。编译后,.aspx 页面将从合并的局部类派生而来,并且被编译到它自己的页面程序集中。这种设计降低了由于编辑设计器生成的代码而不小心破坏页面的风险。
在 ASP.NET 1.x 中,所有源代码都编译到单个程序集中。此程序集存储在应用程序目录的 /bin 目录下。为了支持新的编译选项,并针对部署提供某些增强功能,ASP.NET 2.0 实际为每个 ASP.NET Web 页面和用户控件创建了单个程序集。此外,还创建了一个单独的程序集用来保存所有独立的代码文件(即,非代码分离的代码文件)。
由于 ASP.NET 2.0 中的新目录结构,资源文件的位置和存储已发生了变化。尤其是,ASP.NET 2.0 应用程序现在具有一个 App_GlobalResources 目录,专门用于保存资源文件。转换向导将自动把必需的资源文件重新定位到相应的位置。在 ASP.NET 2.0 中,不再需要与 Web 窗体相关联的资源文件,因此将不对其进行修改。
由于 ASP.NET 2.0 中的新目录结构,资源文件的位置和存储已发生了变化。尤其是,ASP.NET 2.0 应用程序现在具有一个 App_GlobalResources 目录,专门用于保存资源文件。转换向导将自动把必需的资源文件重新定位到相应的位置。在 ASP.NET 2.0 中,不再需要与 Web 窗体相关联的资源文件,因此将不对其进行修改。
全局程序集缓存 (GAC):Web 应用程序依赖于位于系统的 GAC 中的某个程序集。以这种方式引用的程序集存储在项目文件中,编译器在运行时会将 Web 应用程序链接到 GAC 中的该程序集。
•
项目对项目 (P2P):在转换过程中,如果解决方案中的所有项目同时转换,将保持 P2P 引用方式。
•
本地:Web 应用程序依赖于在 Web 项目的解决方案外创建的某个基于文件的程序集。以这种方式引用的程序集存储在项目文件中,Visual Studio 将把该程序集的一个版本复制到 bin 目录下。如果 CopyLocal 设置为 true,则将用该程序集的最新版本来更新 bin 目录。编译器会将 Web 应用程序链接到 bin 目录下的该程序集。
ASP.NET 2.0 使用 bin 目录存储以 P2P 和本地方式引用的程序集。此目录不仅包含针对应用程序自动生成的程序集,还可以存储应用程序需要引用的任何其他可执行代码。