转换注意事项
在考虑将 Visual Studio .Net 2003 Web 项目转换为 Visual Studio 2005 格式的最佳做法之前,需要了解转换的优点并确定转换是否有意义。转换的决定最终取决于具体的应用程序和情况。
如果您有一个正在使用的应用程序并且不常更新,则转换它可能没什么意义,因为这么做的好处可能很有限。如果选择不将应用程序转换为 Visual Studio 2005 语法,仍有两种选择可以考虑:
1.
在应用程序虚拟目录的 IIS 设置中,保持将该应用程序映射到 ASP.Net 1.1(或 1.0)。继续使用 Visual Studio .Net 2003 编辑应用程序代码。
2.
在 IIS 设置中,将应用程序映射为在 ASP.Net 2.0 下运行,但不要从 Visual Studio .Net 2003 中升级项目格式。在本例中,应用程序将受益于 ASP.Net 2.0 中的几个安全性和性能增强功能,不过您需要继续使用 Visual Studio .Net 2003 来编辑应用程序代码。注:您可以在同一台 IIS 服务器上同时运行 ASP.Net 1.1 和 ASP.Net 2.0 应用程序。
将 Web 应用程序项目转换到 Visual Studio 2005 的主要优点是,能够在现有应用程序中使用 ASP.Net 2.0 的许多新增功能(例如,母版页等)。如果您希望增强一个现有的、用 Visual Studio .Net 2003 生成的 Web 应用程序,升级到 Visual Studio 2005 可能是最正确的决定。
对转换 Web 项目的预期
对于相对简单的 Web 项目(其中一个 Web 项目是 Visual Studio .Net 2003 解决方案中的唯一项目),转换应该是一个相对自动的过程,需要很少的时间或问题解决方案。
如果要转换的应用程序大小合理,并且一个 Visual Studio 解决方案中有几个 Web 项目和其他项目(如类库),则在迁移期间可能会遇到问题。做好准备用一天中较好的一段时间来完成整个过程。本文提供的步骤和指导可以帮助信息完备的用户迁移大多数中等复杂程度的应用程序。
返回页首
第一部分:准备要转换的 Visual Studio .Net 2002/2003 Web 项目
在 Visual Studio .Net 2003 中配置应用程序
升级项目时,建议将 Visual Studio .Net 2002/2003 和 Visual Studio 2005 安装在同一台计算机上。
准备迁移 Visual Studio .Net 2003 Web 项目时,首先要确保该项目已配置并且在 Visual Studio .Net 2003 环境中正常运行。
如果要升级一个其解决方案中包括多个项目的应用程序,则确保在 isual Studio .Net 2003 内部生成和运行整个解决方案,然后才能进行迁移。即使要升级一个由单个 Web 项目表示的应用程序,还是要打开解决方案文件并在 Visual Studio .Net 2003 中测试和运行应用程序。为此,请在 Visual Studio .Net 2003 中单击 Open Solution。
当解决方案在 Visual Studio .Net 2003 中打开时,单击 Build 菜单上的 Build Solution,以确保应用程序编译不会出错。
图 1. 生成解决方案
要运行此应用程序,请在 Visual Studio .Net 2003 中按 F5,并确保该应用程序正常运行,不会出错。确保尝试解决方案中所有 Web 项目中的页,以确保 IIS 配置正确,可以支持应用程序页。
将排除的文件移到 Web 项目外
另一个可以将潜在问题降到最少的措施是,将所有排除的文件从您的 Web 项目中删除。如果在 Web 项目文件夹结构中存在任何不被解决方案中的任何 Web 项目引用的文件,则将这些文件移到一个单独的位置,然后再迁移您的解决方案。
要帮助找到这些排除的文件,您可以使用解决方案资源管理器中的 Show All Files 按钮。
图 2. 显示隐藏文件
检查重复的项目文件
另一个可能产生迁移问题的项目结构问题是,IIS Web 应用程序的根文件夹中有多个项目文件。通常,给定的 IIS Web 应用程序的根文件夹中只有一个项目文件(*.vbproj 或 *.csproj),但有时存在多个项目文件。
IIS Web 应用程序的根文件夹中有多个项目文件,一个常见的原因是,如果您有一个包含多个 Web 项目的解决方案,则每个项目都在该 Web 应用程序中生成单独的一组页面。这种类型的解决方案结构使用户可以在单个 Web 应用程序中将一组不同的页面组成不同程序集。下面描述这种结构的一个示例。
如果在 IIS Web 应用程序的同一个根文件夹下有多个 Web 项目,只要每个项目不包括相同的一组文件,您在迁移期间就可能不会碰到任何问题。
如果在多个 Web 项目中引用了相同的文件集或子文件集,则这些普通文件将被迁移两次并且出错。这种情况通常发生在创建了现有项目文件的备份副本后,这样会产生两个具有一组完全相同文件的 Web 项目文件。如果在 Web 应用程序的根文件夹中有多个 Web 项目文件并且它们引用相同的文件集,则确保删除该解决方案不使用的任何项目文件,以保证 Web 项目中的文件不会迁移两次。
检查包括相同 Web 项目的多个解决方案
推荐的过程是迁移整个 Visual Studio 解决方案,尽管可能有几个解决方案代表正在迁移的应用程序。在这种情况下,您可能每次迁移一个解决方案,以便将整个应用程序转换到 Visual Studio 2005。例如,如果两个 Visual Studio 解决方案包括同一个 Web 项目并且尝试对它们进行升级,则在迁移第二个解决方案时可能会出现错误。
为了避免这种情况,请迁移第一个解决方案。迁移第二个解决方案时,从第二个解决方案中删除所有作为第一个解决方案一部分已进行迁移的 Web 项目。删除已迁移的 Web 项目后,即可迁移第二个解决方案,不会产生任何问题。迁移第二个解决方案后,可以重新添加已迁移的 Web 项目。
删除对 Web 项目的引用
如果您有一个包含多个项目的解决方案,确保不存在对解决方案中 Web 项目的任何引用也非常重要。这种模式的一个示例如下:如果有两个 Web 项目(WebProjectA 和 WebProjectB),则 WebProjectB 引用 WebProjectA 以使用 WebProjectA 中的某些类。
图 3. 删除 Web 项目引用
解决方案迁移到 Visual Studio 2005 后,在 Visual Studio .Net 2003 中启用的该模式将不再起作用。幸运的是,可以修改解决方案代码来避免这种情况。为此,可以通过将共享代码移动到类库,并从该类库引用共享代码来使用与上一部分类似的模型。
我们将使用 WebProjectA 和 WebProjectB 的简单示例(它有一个对 WebProjectA 的项目引用)来阐述如何执行该操作:
1.
使用 File > Add Project > New Project 向解决方案添加相同语言(Visual Basic 或 C#)的新 ClassLibrary 项目。
2.
对于 WebProjectB 需要的、WebProjectA 中的任何类,将这些类复制到新的 Class Library 项目中。
3.
在 WebProjectB 中删除对 WebProjectA 的引用
4.
在 WebProjectA 和 WebProjectB 中,向第 3 步中创建的 Class Library 项目添加一个新的“项目引用”。
5.
使用上面提供的指导重新构建解决方案后,进行检查以确保在 Visual Studio .Net 2003 中干净地生成解决方案。完成解决方案生成后,运行整个应用程序以确保它仍具有全部功能。
图 4. 迁移Web 项目后的解决方案
返回页首
第二部分:迁移您的 Web 项目
运行 Visual Studio 2005 Migration Wizard
使用第一部分中的准则重新构建 Visual Studio .Net 2003 解决方案,并正确验证整个解决方案的生成和运行后,现在该准备迁移到 Visual Studio 2005 了。
升级应用程序时,最佳做法是在已经使用 Visual Studio .Net 2003 进行测试和运行的计算机上进行迁移。Visual Studio 2005 完全可以与 Visual Studio .Net 2003 安装在同一台计算机上,因此您应该能够在同一台计算机上安装 Visual Studio 2005,而不产生任何问题。
在同一台计算机上安装 Visual Studio 2005 后,通过打开代表应用程序的解决方案文件来升级应用程序。虽然有可能打开单个项目并迁移它们,但最省事的途径是迁移整个解决方案。为此,请在 Visual Studio 2005 中单击 Open Project,并打开表示待升级应用程序的解决方案文件 (*.sln)。屏幕将显示以下内容,指示可以开始迁移过程:
图 5:转换向导
为了获得最好的结果,请遵循此向导中提供的默认值以开始迁移。
备份应用程序
在该转换向导显示的步骤中,请密切关注创建解决方案的备份副本。重新检查,确保选择了 Yes 选项以创建备份,而且一定要注意备份位置,以便将来恢复 Visual Studio .Net 2002/2003 Web 应用程序的备份。
图 6. 备份项目
返回页首
第三部分:完成迁移的迁移后步骤
检查转换报告
完成 Conversion Wizard 后,会生成一份概括了迁移过程结果的 XML 报告。
图 7. 转换报告
一定要注意文档窗口顶部 URL 字段中显示的 XML 文件的位置。记下此位置,以便在关闭文件后可以再次引用 XML 转换报告。除报告解决方案中所有项目的错误和警告的 XML 报告以外,每个 Web 项目都包含一个 ConversionReport.txt 文件,该文件具有与解决方案中的特定 Web 项目相同的信息。
XML 报告概括解决方案中每个项目的结果。折叠报告时,您可以快速确定解决方案中的每个项目生成的警告和错误的数量。展开每一部分后,可以详细查看特定项目的警告和错误。
对于最简单的应用程序,转换报告可能会显示解决方案中的所有项目均成功迁移。在大多数具有中高等复杂性的真实情况中,更可能的结果是报告某些迁移错误和警告,并需要对它们进行调查。
以下部分介绍解决报告的问题时使用的最有效方法。
首先确保编译类库项目
通常,用来解决任何所报告问题的最好方法是修复解决方案中的每个项目,首先从共享组件开始,一次修复一个。
例如,如果解决方案中存在引用其他项目(如类库项目)的 Web 项目,则先解决被引用项目中报告的所有问题。为此,对于 Web 项目引用的每个项目,右击各个项目,然后选择 Build Project 以确保它进行编译。
图 8. 先生成类库
如果进行转换之前就在 Visual Studio .Net 2003 中对整个解决方案进行了干净的编译,则在类库项目中可能遇到的编译错误是与保留关键字的冲突或框架中的新增类型,应该直接修复。
修复每个 Web 项目中的转换错误和警告
修复了解决方案中类库项目报告的任何错误后,下一步是修复每个 Web 项目中报告的错误和警告。对于每个 Web 项目,使用以下准则作为解决所发现问题的方法:
1.
打开 Web.config 文件,并关闭批编译。通过将编译标记中的 batch=false 属性设置成以下形式,可以实现该操作:。关闭批编译可降低掩盖应用程序中可能存在但未报告的编译错误的可能。
2.
通过打开 Web 项目根文件夹中的 conversionreport.txt 文件来查看已报告的警告和错误。该文本文件包括迁移期间标题为 Errors、Warnings 和 Comments 的部分。查看 Errors 部分和 Warnings 部分,并尝试使用以下方法解决问题(Comments 部分主要是提供信息,无需任何操作):
1.
如果在转换文件中看到有关以前所转换“被排除的”文件的任何警告,建议您先删除这些文件,因为它们会导致许多干扰识别和修复应用程序中其他错误的编译错误。
2.
为了完成 conversionreport.txt 文件中报告的其他错误和警告的剩余部分,请参阅“Common ASP.Net 2.0 Conversion Issues and Solutions”,以了解有关如何解决可能报告的每个警告和错误的具体指导。
3.
解决 conversionreport.txt 文件中的所有错误后,生成 Web 项目以解决可能存在的任何其他的编译错误。为此,请选择您正在使用的 Web 站点项目的根节点,并在 Build 菜单上选择 Build Web Site。请再次参阅“Common ASP.Net 2.0 Conversion Issues and Solutions”,以了解任何可能报告的特定编译错误,并获得有关如何纠正这些错误的指导。
4.
解决报告的问题且 Web 项目成功编译后,还有两个推荐的步骤:
1.
Web 项目中显示的许多 *.resx 文件可能不再需要。通过与 aspx 文件或 ascx 文件相同的前缀名称,可以轻松识别这些文件(例如,default.aspx.resx)。无论是否需要,Visual Studio .Net 2003 都为每一页创建资源文件。大多数情况下,这些文件为空(或者包含应用程序不用的资源)并且可以被删除。
2.
将 conversionreport.txt 重命名为 conversionreport.Webinfo。因为 conversionreport.txt 可以通过 Web 浏览器查看,并且可能会显示有关您站点的敏感信息,所以建议执行该操作。通过将该文件重命名为 conversionreport.Webinfo,默认情况下不能通过 Web 浏览器访问它。
修复每个 Web 项目中的运行时问题
在 Visual Studio 2005 中对所有类库和每个 Web 项目进行干净的编译后,下一步就是运行整个应用程序并验证功能。在您测试应用程序功能时,可能会遇到一些运行时异常,这些异常可能是由于违反了 ASP.Net 1.1 和 ASP.Net 2.0 之间引入的改变而产生的。“Common ASP.Net 2.0 Conversion Issues and Solutions”有助于识别这些错误并对其进行修复。
返回页首
第四部分:其他信息
本文档前面的部分介绍了将 Web 项目从 Visual Studio .Net 2003 转换到 Visual Studio 2005 的整个分步过程。下列部分包括其他有用的信息:
HTML / XHTML 验证错误
您可能会遇到 IDE 中的 ASPX 页和 ASCX 页处于打开状态时报告的验证错误。默认情况下,可能会报告这些额外错误,因为 Visual Studio 2005 拥有基于 XHTML 1.1 标准的更严格的 HTML 验证。
这些不是编译错误,不会影响应用程序的功能。如果一个 ASPX 页或 ASCX 页处于打开状态,则这些错误和编译错误出现在同一个错误列表中,因此可以通过增加要查看的错误总数来增加复杂性。
可以执行一些操作来推迟处理这些验证错误。
• 将 Visual Studio 2005 中的默认验证改为“Internet Explorer 6.0”。如果打开 ASPX 页,则可以在工具栏中进行此操作。
图 9. 设置验证集
• 如果在应用程序中不一定要遵从 XHTML,则可以选择将验证设置为“Internet Explorer 6.0”。如果您愿意确保遵从 XHTML,则建议在转换期间将该验证设为“Internet Explorer 6.0”,转换完成后将该验证切换为 XHTML。
• 另一个窍门是,在选择 Build Website 后,关闭所有打开的 ASPX 页和 ASCX 页。这样,HTML 验证错误就不会与报告的任何编译错误混在一起。这有助于识别哪些错误与站点编译有关,哪些错误仅仅是 HTML 中的验证问题。
使用“Local IIS”选项卡或解决方案文件打开 Web 站点项目
本文,我们建议您打开解决方案文件 (*.sln) 以打开 Web 项目。这样做可以确保在转换后将 Visual Studio .Net 2003 Web 项目作为 Visual Studio 2005 的“Local IIS”项目打开。
通过打开项目文件夹而不是解决方案文件,还可以在 Visual Studio 2005 中打开 Web 站点项目。如果您或小组中的其他人成员决定用这种方式打开项目,请确保使用 Visual Studio 2005 中的“Local IIS”选项卡打开任何转换后的项目。
图 10. 打开项目
返回页首
小结
概括而言,Visual Studio 2005 和 ASP.NET 2.0 都提供了许多新增功能,这使得生成 Web 应用程序比以前更容易。您应该评估利用这些新功能对于将特定的 Visual Studio 2003 Web 项目转换到 Visual Studio 2005 是否有意义。