在 ASP.NET 2.0 中,由于局部类这一概念的出现,代码分离模式已发生了变化。使用 partial 关键字可以将单个类的代码分隔到两个独立的文件中。代码分离文件定义了一个包含用户代码的局部类。设计器还将生成存根文件,其中包含一个局部类,用于定义 .aspx 页面中使用的控件对应的字段声明。编译后,.aspx 页面将从合并的局部类派生而来,并且被编译到它自己的页面程序集中。这种设计降低了由于编辑设计器生成的代码而不小心破坏页面的风险。
对应用程序的更改
转换向导将在下列几个方面对应用程序进行更新:
将 .aspx 页面中的所有 CodeBehind 属性更改为 CodeFile 属性。 | |
更改所有代码分离类定义以执行 partial 关键字。 | |
如果在 .aspx 页面上声明了所有控件,则从代码分离文件中删除所有控件声明。 | |
(仅限于 C#)将事件挂钩代码从代码分离文件的 InitialzeComponent 函数移到 .aspx 页面中。请注意,此操作不适用于自动调用的事件,包括 Page_Init、Page_Load、Page_DataBind、Page_PreRender、Page_Unload、Page_Error、Page_AbortTransaction 和 Page_CommitTransaction。 |
独立的代码文件
在 ASP.NET 1.x 中,所有源代码都编译到单个程序集中。此程序集存储在应用程序目录的 /bin 目录下。为了支持新的编译选项,并针对部署提供某些增强功能,ASP.NET 2.0 实际为每个 ASP.NET Web 页面和用户控件创建了单个程序集。此外,还创建了一个单独的程序集用来保存所有独立的代码文件(即,非代码分离的代码文件)。
对应用程序的更改
转换向导将在下列几个方面对应用程序进行更新:
将所有独立的代码移到 App_Code 目录下。 | |
将所有的默认、friend 和 Internal 范围的声明更改为 Public。需要进行此项更改是因为代码分离文件不再与共享代码位于同一个程序集中。因此,必须更改访问级别以便与新的多程序集结构相匹配。 | |
将所有 Type.GetType() 调用更改为 System.Web.Compilation.BuildManager.GetType()。这种新方法可自动识别要访问哪个程序集来查找类的类型。如果您试图在代码分离文件中使用 Type.GetType(),将很可能遇到 TypeLoadException,因为代码分离文件与独立的代码位于不同的程序集中。 |
资源
由于 ASP.NET 2.0 中的新目录结构,资源文件的位置和存储已发生了变化。尤其是,ASP.NET 2.0 应用程序现在具有一个 App_GlobalResources 目录,专门用于保存资源文件。转换向导将自动把必需的资源文件重新定位到相应的位置。在 ASP.NET 2.0 中,不再需要与 Web 窗体相关联的资源文件,因此将不对其进行修改。
对应用程序的更改
转换向导通过将所有独立的资源文件移到 App_GlobalResources 目录下,对应用程序进行更新。此目录下的所有文件将内置在单个程序集中。
请注意,必须进行某些其他的代码更改,以便访问资源文件。这些代码更改在“常见转换问题”部分的“资源文件”中进行了概要介绍。
引用
在 ASP.NET 1.x 中,有三种类型的外部程序集引用方式:
全局程序集缓存 (GAC):Web 应用程序依赖于位于系统的 GAC 中的某个程序集。以这种方式引用的程序集存储在项目文件中,编译器在运行时会将 Web 应用程序链接到 GAC 中的该程序集。 | |
项目对项目 (P2P):在转换过程中,如果解决方案中的所有项目同时转换,将保持 P2P 引用方式。 | |
本地:Web 应用程序依赖于在 Web 项目的解决方案外创建的某个基于文件的程序集。以这种方式引用的程序集存储在项目文件中,Visual Studio 将把该程序集的一个版本复制到 bin 目录下。如果 CopyLocal 设置为 true,则将用该程序集的最新版本来更新 bin 目录。编译器会将 Web 应用程序链接到 bin 目录下的该程序集。 |
a