正 文

常见的 ASP.NET 2.0 转换问题和解决方案


www.7dspace.com  更新日期:2005-10-4 8:19:58  七度空间


进行了哪些更改

转换向导将对 ASP.NET 1.x 应用程序执行一系列检查和转换。这些检查全都设计为自动执行大部分常见的转换任务。但是,转换向导可能无法完全转换应用程序。在阅读了有关转换向导可以执行的操作的内容之后,您应当通读本白皮书的常见问题部分,以查明可能需要执行的其他操作。

对代码分离文件的更改

在 ASP.NET 1.x 中,通常使用 .aspx 页面和代码分离文件将图形组件与编码组件分开。.aspx 页面是从代码分离文件派生而来的。这意味着您必须声明这两类的所有控件,以便正确绑定回调事件。这种继承关系还引发了有关使两类同步的某些问题,尤其是当开发人员对 .aspx 页面进行了更改(例如,添加一个控件)而没有对代码分离文件进行必要的更改也没有重新编译应用程序时。

在 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 目录下的该程序集。

ASP.NET 2.0 使用 bin 目录存储以 P2P 和本地方式引用的程序集。此目录不仅包含针对应用程序自动生成的程序集,还可以存储应用程序需要引用的任何其他可执行代码。

对应用程序的更改

由于 ASP.NET 2.0 应用程序没有项目文件,因此必须移动对外部程序集的引用。

GAC 引用被移到 web.config 文件中。例如:

   <system.web>
<compilation>
<assemblies>
<add assembly="EnvDTE, Version=8.0.0.0, Culture=neutral,
PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</assemblies>
... Other tags
</compilation>
... Other tags
</system.web>

对 GAC 中的程序集的 web.config 引用

P2P 引用存储在解决方案文件中。在转换过程中,如果解决方案中的所有项目同时转换,则 P2P 引用将保持为 P2P。

在 Visual Studio 2005 的 Beta 2 版中,本地引用的程序集不可更新。在 Visual Studio 2005 的最终版本中,通过添加 Refresh 文件修复了此行为。此文件存储在 bin 目录下,其文件名采用程序集名称加上“.refresh”的方式来生成。Refresh 文件包含指向外部引用的程序集的路径,其存在向编译器指明,如果原始程序集的时间戳时间较晚,则需要刷新此程序集及其依赖的程序集。这与 Visual Studio .NET 2003 中的“复制本地”行为相似。

以 P2P 和本地方式引用的程序集都被复制到 Bin 目录下。

9页,页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] 

上一篇:Fireworks MX 2004橡皮图章工具组--Fireworks MX 2004 视频教程(11)
下一篇:通过 XML 发布新闻
作者:Michael Bundschuh,Robert McGovern  来源:Microsoft,Infusion Development ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐