65.9K
CodeProject 正在变化。 阅读更多。
Home

迁移 Web 应用程序 VS 2003 - VS 2005

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.24/5 (7投票s)

2007 年 11 月 27 日

CPOL

10分钟阅读

viewsIcon

24197

将 Web 应用程序从 VS 2003 迁移到 VS 2005 的过程/步骤

引言

随着新版 .Net Framework 的发布,我们大多数人也会迁移现有应用程序以利用新版本的优势。随着每个新版本的发布,现有的一些编码方法都会发生变化。尽管 Microsoft 在较新的 VS IDE 中提供了迁移解决方案/项目的实用工具,但我们仍然需要手动删除由于迁移而导致的所有错误/警告。

以下是从 VS 2003 迁移到 VS 2005 的现有 Web 项目的步骤/过程:

迁移准备

以下是在启动迁移过程之前需要执行的步骤

Microsoft Visual Studio 2005 安装

  • 应安装 VS 2005

IIS 设置

  • 删除 IIS 中为选定的 Web 项目指定的虚拟目录路径。如果您要为迁移的代码创建一个新文件夹,则需要此步骤。

从 Source Safe 获取最新源代码

  • 打开您用于产品的任何 Source Safe。
  • 将最新版本下载到您的计算机。最好为迁移应用程序创建一个新文件夹。
  • 只读属性设置:选择项目的所有文件/文件夹,并删除“只读”属性。使所有文件可写。
  • 如果可能,删除任何与 Source Safe 相关的文件。

IIS 重置

  • 将源代码复制到新文件夹后,我们需要重置/创建 IIS 中网站的虚拟目录。物理路径应指向上述步骤(**从 Source Safe 获取最新源代码**)中创建的文件夹。

迁移过程

Microsoft VS 2005 提供了用于将 VS 2003 Web 应用程序转换为 VS 2005 的向导。请按照以下步骤将 VS 2003 Web 应用程序迁移到 VS 2005。

迁移向导

VS 迁移向导是一个简单的工具,可帮助我们将代码迁移到 VS 2005。

以下是启动迁移向导的步骤

  • 打开 Windows 资源管理器并选择复制了最新源代码的文件夹。

  • 右键单击项目解决方案文件 (.sln) 并选择“打开方式 -> Microsoft Visual Studio 版本选择器”。如果版本选择器未在 VS 2005 中打开解决方案,则打开 VS 2005 IDE,然后选择“文件 -> 打开 -> 项目文件”。

  • 此版本选择器选项将在 VS 2005 中打开项目解决方案并启动迁移向导。

  • 欢迎使用向导:单击“下一步”。

  • 选择创建备份:通常,我们在 Source Safe 中有代码。因此,我们可以选择“否”来创建备份文件。如果您仍希望在转换前存储备份,可以选择“是”并设置备份文件的存储路径。

  • 准备转换:单击“完成”。

  • 这需要几秒钟,具体取决于项目的大小。

  • 这是迁移的第 I 步。

  • 成功转换后,VS 2005 IDE 将显示以下消息。此消息要求您通过单击“解决方案资源管理器”中的“转换为 Web 应用程序”来完成迁移过程的第 II 步。

  • 转换完成:如果希望查看转换日志,请选择“关闭向导时显示转换日志”。

    • 右键单击解决方案资源管理器中的解决方案,然后选择“转换为 Web 应用程序”。

    手动项目迁移步骤

    迁移向导完成了将 VS 2003 项目转换为 VS 2005 的大部分迁移活动。此时,如果我们查看 VS 2005 IDE 中的“错误列表”窗口,可以看到许多错误和警告。所有这些错误/警告都需要手动纠正。大多数错误/警告是由于引用、过时的类等原因造成的。

    以下是错误/警告列表及其解决方法

    程序集引用:在迁移应用程序时,需要重新配置一些程序集引用。通过右键单击解决方案名称 -> 属性,可以获得丢失的引用程序集列表。在属性窗口中,选择“引用”选项卡。

    “引用”选项卡将列出应用程序引用的所有程序集。除了这些程序集列表之外,我们还可以找到一些程序集的路径指定为“无法找到引用的程序集”。这些是引用丢失的程序集。我们需要重新配置这些程序集的引用。

    操作

    • 记下路径丢失的程序集。
    • 删除所有这些路径丢失的程序集。
    • 通过选择正确的路径,为所有丢失的程序集添加程序集引用。

    添加丢失的引用程序集后,重新生成解决方案。完成后错误计数将减少。

    未使用的局部变量:在开发过程中,我们声明了在代码中从未使用过的变量。所有此类变量都会被 VS 2005 IDE 标记为“未使用的变量”。我们可以在“错误列表”窗口的“警告”选项卡中找到未使用的变量列表。

    操作

    • 删除所有未使用的变量。
    • 删除所有未使用的变量后。
    • 保存解决方案。

    变量在使用前赋值:在开发过程中,我们声明变量/对象,但未对其进行初始化,从而可能导致异常 - NullValueException。为了消除此类异常,我们需要在变量/对象使用之前对其进行初始化。

    操作

    • 从“错误列表”的“警告”选项卡中找到未初始化的变量。
    • 在声明变量的地方初始化变量。

    成员变量名:根据 CLS 合规性,任何类或类成员的名称都不能以“_”(下划线)开头。因此,所有以“_”(下划线)开头的成员都需要更改。

    操作

    • 找到警告“名称‘_%MemberName%’不符合 CLS 标准。”
    • 通过删除下划线(_)来重命名变量。

    共享成员访问:VS 2003 允许类对象访问其类的共享成员。但 VS 2005 禁止通过对象引用类的共享成员。相反,我们应该使用类名来访问共享成员。

    操作

    • 找到警告“通过实例访问共享成员、常量成员、枚举成员或嵌套类型;将不评估限定表达式。”
    • 使用类名而不是对象来访问类的共享成员。

    函数未返回值:VS 2003 允许定义不返回值的函数。此类函数在 VS 2005 中被标记为警告。

    操作

    • 找到警告“函数‘%%FunctionName%%’并非在所有代码路径上都返回值。使用结果时,在运行时可能会发生 null 引用异常。”
    • 如果函数不应返回值
      • 将其从 Function 改为 Sub
    • 如果函数应返回值
      • 从所有代码路径返回该值。

    过时的组件/函数:VS 2003 中的一些 .NET 库组件已被标记为过时,并在 VS 2005 中提供了新的组件。所有这些过时的组件都需要替换为新的组件。

    以下是标记为过时的组件列表

    System.Configuration.ConfigurationSettings

    此组件已被标记为过时,因此需要替换为 System.Configuration.ConfigurationManager

    操作

    • 添加对 System.Configuration.dll 的引用。
      • 注意:System 命名空间确实包含 System.Configuration 命名空间。但它不包含 ConfigurationManager 类。为了引用此类,我们需要添加对 System.Configuration.dll 的引用。
    • System.Configuration.ConfigurationSettings 替换为 System.Configuration.ConfigurationManager
      • 例如:
        • VS 2003:System.Configuration.ConfigurationSettings.AppSettings.Item("SiteScope")
        • VS 2005:System.Configuration.ConfigurationManager.AppSettings.Item("SiteScope")
    • 在整个应用程序中, wherever System.Configuration.ConfigurationSettings is used. (在整个应用程序中, wherever System.Configuration.ConfigurationSettings is used.)
    • 保存解决方案。

    System.Data.SQLClient.SQLParameter.Add(parameterName As String, value As Object)

    方法 System.Data.SQLClient.SQLParameter.Add(parameterName As String, value As Object) 在 VS 2005 中已弃用,因此需要替换为 System.Data.SQLClient.SQLParameter.AddWithValue(parameterName As String, value As Object)

    操作

    • 找到警告:“Public Function Add(parameterName As String, value As Object) As System.Data.SqlClient.SqlParameter' is obsolete: 'Add(String parameterName, Object value) has been deprecated. Use AddWithValue(String parameterName, Object value)。”
    • 将 System.Data.SQLClient.SQLParameter.Add(parameterName As String, value As Object) 替换为 System.Data.SQLClient.SQLParameter.AddWithValue(parameterName As String, value As Object)
      • VS 2003:System.Data.SQLClient.SQLParameter.Add(parameterName As String, value As Object)
      • VS 2005:System.Data.SQLClient.SQLParameter.AddWithValue(parameterName As String, value As Object)
    • 保存解决方案。

    System.Web.UI.Page.Title

    System.Web.UI.Page.Title 属性被标记为可重写。因此,如果任何继承自 System.Web.UI.Page 的 Web 窗体使用 Title 作为其公共属性,则需要将其标记为“overloads”。

    操作

    • 找到警告:“property 'Title' shadows an overloadable member declared in the base class 'Page'. If you want to overload the base method, this method must be declared 'Overloads'。”
    • 将属性标记为“Overloads”。
    • 保存解决方案。

    Page.IsClientScriptBlockRegistered

    方法 Page.IsClientScriptBlockRegistered(key as String) 在 VS 2005 中已弃用,因此需要替换为 ClienScript.IsClientScriptBlockRegistered(key as String)。

    操作

    • 找到 Page.IsClientScriptBlockRegistered(...) 并将其替换为 ClientScript.IsClientScriptBlockRegistered(...)
    • 保存解决方案。

    Page.RegisterStartupScript()

    方法 Page.RegisterStartupScript(...) 在 VS 2005 中已弃用,因此需要替换为 ClienScript.RegisterStartupScript( Type , key as String, script As String)。

    操作

    • 找到 Page.RegisterStartupScript(...) 并将其替换为 ClientScript.RegisterStartupScript(GetType(%%ClassName%%>, %%key%%, %%script%% )
    • 保存解决方案。

    Page.RegisterOnSubmitStatement()

    方法 Page.RegisterOnSubmitStatement(...) 在 VS 2005 中已弃用,因此需要替换为 ClienScript.RegisterOnSubmitStatement(...)。

    操作

    • 找到 Page.RegisterOnSubmitStatement(...) 并将其替换为 ClientScript.RegisterOnSubmitStatement(...)
    • 保存解决方案。

    Page.RegisterClientScriptBlock()

    方法 Page.RegisterClientScriptBlock(...) 在 VS 2005 中已弃用,因此需要替换为 ClienScript.RegisterClientScriptBlock(...)。

    操作

    • 找到 Page.RegisterClientScriptBlock(...) 并将其替换为 ClientScript.RegisterClientScriptBlock(GetType(%%ClassName%%>, %%key%%, %%script%% )
    • 保存解决方案。

    注意:如果在 UserControls 中使用了上述脚本函数,则需要将这些脚本函数引用为:Me.Page.ClientScript.%%ScriptingFunction%%

    System.Web.Mail

    System.Web.Mail 类在 VS 2005 中已标记为过时,取而代之的是需要使用 System.Net.Mail。除了命名空间更改外,System.Net.Mail 类中还引入了一些新对象。

    System.Web.Mail.MailMessage

    System.Web.Mail.MailMessage 在 VS 2005 中已标记为过时;取而代之的是需要使用 System.Net.Mail.MailMessage。

    操作

    • 找到警告:System.Web.Mail.MailMessage' is obsolete: 'The recommended alternative is System.Net.Mail.MailMessage。
    • 将 Import 语句更改为以下内容
      • VS 2003:Imports System.Web.Mail
      • VS 2005:Imports System.Net.Mail

    MailAddress

    MailMessage 类用于发送邮件。邮件属性(如 From、To、CC、BCC)在 VS 2003 中是字符串变量。但在 VS 2005 中,这些属性的类型是“MailAddress”。“MailAddress”是 VS 2005 中引入的新类。此类用于存储电子邮件地址。

    操作

    • 找到错误:值类型“String”无法转换为“System.Net.Mail.MailAddress”。
    • 更改 System.Net.Mail.MailMessage 对象的 From、To、CC、BCC 属性的电子邮件地址设置。
      • 属性 To
        • VS 2003:.To = %%String%%
        • VS 2005:.To.Add(New MailAddress(%%String%%))
      • 属性 From
        • VS 2003:.From = %%String%%
        • VS 2005:.From = New MailAddress(%%String%%)

    SmtpMail

    在 VS 2003 中,使用 SMTP 发送邮件时会使用 SMTPMail 对象。此类已被标记为过时,取而代之的是需要使用 System.Net.Mail.SmtpClient 类。

    操作

    • 找到警告:System.Web.Mail.SmtpMail' is obsolete: 'The recommended alternative is System.Net.Mail.SmtpClient。
    • 声明一个 SmtpClient 类型的变量
      • Dim clientMail AS SmtpClient
    • 从代码中删除以下行,这些行用于发送邮件
      SmtpMail.SmtpServer = ConfigurationSettings.AppSettings("SMTPServer")
      SmtpMail.Send(MailMessage)
    • 在代码中添加以下行以发送邮件
      clientMail = New SmtpClient
      clientMail.Send(MailMessaage)
    • 在上面的第 3 步中,我们删除了从配置文件读取 SMTPServer 地址并将其设置到 SMTPMail 类的行。我们仍然需要为发送邮件配置 SMTPServer 地址。在 VS 2005 中,SMTPServer 在配置文件中配置,但放在一个单独的 XML 标记中。
    <System.Net>
        <system.net>
            <mailSettings>
                <smtp deliveryMethod="Network">
                    <network
                    host="MailServer"
                    port="25"
                    defaultCredentials="true"
                    />
                </smtp>
            </mailSettings>
        </system.net>
    </System.Net>

    编译/运行应用程序

    上述过程应能消除应用程序中的大多数错误/警告。如果存在上面未提及的其他错误/警告,请告诉我,以便我相应地更新文档。

    成功解决错误/警告后,运行应用程序并检查每个页面是否正常工作。

  • © . All rights reserved.