有关 Visual Web Developer 转换的疑难解答

更新:2007 年 11 月

当使用 Microsoft Visual Web Developer 打开在 Microsoft Visual Studio .NET 的较早版本中创建的 Web 应用程序项目时,Visual Web Developer 会自动将 Web 应用程序转换为 ASP.NET 2.0 版中使用的格式。

ms178461.alert_note(zh-cn,VS.90).gif说明:

有关转换过程的详细信息,请参见 自 Visual Studio .NET 的 Web 项目转换

一些情况下,Web 应用程序在转换后将会有不同的行为。本主题描述最常见的这些情况并建议解决方案。有关迁移疑难解答的更多信息,您还可以参考位于ASP.NET Development Center for Migration(用于迁移的 ASP.NET 开发中心)的迁移信息。

本主题描述下列转换问题:

  • 转换后控件呈现不同的标记

  • 标记验证产生错误

  • 转换后引发页事件两次

  • 编译过程中报告不明确类

  • 与代码隐藏页模型中的更改相关的错误

  • 分析错误

  • 已排除的文件不再排除

  • 混合项目类型的部分已转换解决方案

  • 将基于 Web 的网站作为文件系统网站打开

  • 客户端 ID 从代码隐藏文件中被删除

  • 循环引用错误

转换后控件呈现不同的标记

在 ASP.NET 2.0 中,除非浏览器被标识为不支持 XHTML 功能,否则默认情况下,Page 类和 ASP.NET Web 服务器控件会呈现与 XHTML 1.0 Transitional 标准兼容的标记。转换向导会自动将 xhtmlConformance 元素的 mode 属性设置为 Legacy。与 ASP.NET 较早版本中的元素呈现相比,转换后的元素呈现稍有不同。大多数情况下,呈现中的差异对应用程序的功能没有影响。但是,如果使用的客户端脚本依赖于特定的标记或属性,则应用程序可能会不按之前的方式工作。

有关更多信息,请参见 ASP.NET 和 XHTML

标记验证产生错误

迁移后,默认的标记验证架构被设置为 Internet Explorer 6.0。这意味着编辑器会将页面中的标记与以下架构进行比较:即定义 Microsoft Internet Explorer 6.0 将哪些内容视为有效的 HTML 的架构。采取此步骤可使向 Visual Web Developer 的转换更加容易。修改您的标记是一种良好的做法,以便您的应用程序页可以使用 XHTML 1.0 Transitional 验证架构进行验证。

有关如何更改验证架构的详细信息,请参见如何:为 Visual Web Developer 中的 HTML 编辑选择验证架构

转换后引发页事件两次

转换过程会移除 @ Page 指令的 AutoEventWireup 属性。此属性的默认值为 true,这意味着页面会自动引发名为 Page_事件的事件。如果一个页面已将 AutoEventWireup 属性显式设置为 false,则在转换后,页面上的事件将会被自动引发。如果该页面包括另外一个引发事件的显式方式(例如 Visual Basic 中的 Handles 关键字),则事件可能被引发两次。若要解决这一问题,请将 AutoEventWireup="false" 添加至 @ Page 指令。

编译过程中报告不明确类

在转换项目后,编译器可能将报告某个类是不明确的,这意味着该类从多个命名空间导入。例如,如果转换后的项目创建 Cache 类的实例,则编译器报告该类同时存在于 System.Net 和 System.Web.Caching 命名空间中。

在类似这样的情况下,.NET Framework 2.0 版包含了一个新类,该类与某个现有类同名。若要更正此问题,请在代码中找到对该类的所有引用,并在类名称前预置命名空间的名称,以创建完全限定引用。

与代码隐藏页模型中的更改相关的错误

如果项目具有访问代码隐藏类中类的受保护成员的 .aspx 页,则在转换此类项目时可能会生成异常。这是由 .NET Framework 2.0 的代码隐藏模型中的更改引起的。在 .NET Framework 的早期版本中,页是代码隐藏类的派生类。但是在 ASP.NET 2.0 中,代码隐藏类定义分部类,这些类在页生成期间与 .aspx 页一起使用,以创建已编译的结果页。

可能遇到此转换问题的一种常见情况是,应用程序在基类代码隐藏类中定义共享布局组件。您可以通过使用用户控件或母版页,或使用 @ Page 指令的 CodeFileBaseClass 属性,获得同样的共享布局功能。有关开发用户控件的更多信息,请参见 ASP.NET 用户控件概述。有关使用母版页的更多信息,请参见 ASP.NET 母版页概述

分析错误

转换向导会就无法分析的 .aspx 文件报告分析错误。分析问题的原因可分为以下几类:

  • 运行转换向导之前未能正确设置 .aspx 页的格式。

  • 未找到 @ Page 指令的 CodeBehind 或 Src 属性。

  • 未找到 .aspx 页中引用的代码隐藏文件。

  • .aspx 文件在项目文件(例如 .csproj 或 .vbproj)中列出,但未在项目目录中列出。如果该文件不是项目的一部分,则可以忽略此错误。

已排除的文件不再排除

在 Visual Studio 的早期版本中,您可以选择在 Web 项目中包含或排除文件。此外,通过将某个文件的生成操作设置为 None,可以从项目生成中排除该文件。迁移向导以不同的方式处理这两种情况。迁移向导会转换 Web 项目中未标记为已排除的文件。迁移向导不会转换不属于项目生成的部分的文件,即不会转换那些已配置为将其生成操作设置为 None 的文件。

完成转换过程后,可以删除任何以前排除的文件或者用 Visual Studio 中未使用的扩展名重新命名这些文件,例如 .exclude 扩展名。如果 Web 项目内的一个项目中的文件未被转换,请检查以确保其生成操作未设置为 None。

已将其关联的生成操作设置为 None 的文件会在转换报告中生成错误信息。有关转换报告的更多信息,请参见 迁移转换报告格式

混合项目类型的部分已转换解决方案

在 Microsoft Visual Studio 2005 和早期版本中,解决方案可以同时由 Web 项目和客户端项目(例如类库或 Windows 应用程序)组成。如果您使用的是 Microsoft Visual Studio 2005 的速成版,则只有与该速成版有关的解决方案部分可以转换。例如,如果在 Visual Web Developer 2005 速成版中使用转换向导,则不管解决方案包含了哪些其他项目类型,您将只能转换打开的解决方案的 Web 项目。生成的已转换解决方案只能部分转换。若要完全转换包含混合项目类型的解决方案,请使用 Visual Web Developer 2005、Visual Studio 2005 或 Visual Studio 2005 Team System。

将基于 Web 的站点作为基于文件的站点打开

若要打开使用早期版本的 Visual Studio 中创建的网站,建议的方法是使用 Visual Web Developer 2005 中的**“打开网站”**菜单选项。随后可以选择将该站点作为基于文件的站点、本地 Microsoft Internet 信息服务 (IIS) 站点、文件传输协议 (FTP) 部署的站点或远程站点来打开。将基于 Web 的站点作为基于文件的站点打开会导致 IIS 元数据信息丢失。具体而言,标记为虚拟目录的子文件夹的有关信息将不会保留下来。当将基于 Web 的站点转换为基于文件的站点时,转换报告将报告一个警告。

建议您关闭该网站,通过使用**“打开网站”命令并选择“本地 IIS”**选项卡重新打开该网站。有关如何使用迁移向导的更多信息,请参见如何:将 Visual Studio .NET 项目转换为 Visual Studio 2005。有关转换报告的更多信息,请参见迁移转换报告格式

客户端 ID 从代码隐藏文件中被删除

如果您的标记所使用的客户端 ID 属性(例如在 HTML div 元素中)与代码隐藏页中声明的成员变量具有相同名称,则在转换过程中将移除该标记中的 ID 标记。

若要解决此问题,请在转换之前检查您的标记和代码,并查找客户端 ID 属性和成员变量之间的名称冲突,然后进行更改以使名称各不相同。

循环引用错误

转换过程将 @ Reference 指令添加到引用其他页或用户控件的代码隐藏页。有时这可能会创建循环引用。若要帮助进行故障排除,可以将 compilation 元素的 batch 属性设置为 False。默认的 batch 属性值为 True。将批处理设置为 False 可能消除循环引用问题。从长远角度看,您可以重新设计这些页或用户控件以使用存储在 App_Code 文件夹中的类中定义的抽象基类,并将 batch 属性重新设置为 True。

请参见

任务

如何:为 Visual Web Developer 中的 HTML 编辑选择验证架构

概念

Web 解决方案和项目文件转换

其他资源

“ASP.NET Development Center for Migration”(用于迁移的 ASP.NET 开发中心)