从 Visual Studio Tools for Office 版本 2003 升级

更新:2007 年 11 月

从 Visual Studio Tools for Office 2003 版 升级到 Microsoft Visual Studio 2005 Tools for the Microsoft Office System (Visual Studio Tools for Office) 后,必须手动执行一些文档级项目升级步骤。

在新的项目系统中,项目代码模板有了较大的更改。升级后的项目已具有新的项目结构,但代码依然在基于早期项目代码模板的原始代码文件中。为了使解决方案可以在升级后立即运行,新的项目类会对旧的导入类(默认情况下是名称为 OfficeCodeBehind 的原始类)进行实例化。若要进行完全升级,必须将代码从旧的 OfficeCodeBehind 类移动到新的文档类、工作簿类或工作表类,如本主题所述。

新的项目系统和结构

Visual Studio Tools for Office 2003 版 中的项目系统对于您的代码具有单个主类文件。新项目系统的特点是“解决方案资源管理器”中表示文档或工作簿的容器结构。代码的类文件在容器结构之下。在这些类文件下是包含由 Visual Studio Tools for Office 生成的代码的隐藏文件。最好不要修改隐藏文件中的代码,因为这些代码在开发过程中可以重新生成,这样,您所做的修改就会丢失。

Excel 工作簿和模板项目

现在,Excel 工作簿和模板项目对应每个工作表包含一个单独的类文件,并且还包含一个对应整个工作簿的类文件。特定于工作表的代码(如对工作表上的控件作出响应的代码)应该放在工作表类中。默认情况下,对于新的文档,这些类的名称为 Sheet1.vb 或 Sheet1.cs、Sheet2.vb 或 Sheet2.cs,依此类推。通常对工作簿产生影响的代码(如工作簿 Open 事件、BeforeClose 事件和操作窗格代码)应该放在工作簿类中。默认情况下,此类的名称为 ThisWorkbook.vb 或 ThisWorkbook.cs。

Word 文档和模板项目

Word 文档和模板项目使用一个代码文件来包含与文档有关的所有代码。默认情况下,此类的名称为 ThisDocument.vb 或 ThisDocument.cs。

有关更多信息,请参见Office 项目模板

升级过程

升级项目时,Visual Studio 执行以下任务:

  • 对项目进行升级,使其符合新的文件格式和项目结构。

  • 将现有文档复制到新的项目文件夹。

  • 移除自定义文档属性 _AssemblyName0_AssemblyLocation0(生成项目时会重新添加这些属性),以防止运行现有的托管代码扩展。

  • 添加原始主代码文件但并入注释以解释所发生的情况,并将文件的名称从 <文档名> 更改为 <文档名>(旧)。

  • 将原始项目中的所有文件添加到新项目。

  • 将现有的所有引用添加到新项目。

不是将现有代码迁移到新类,而是从新主类的 Startup 方法调用旧主类的 _Startup 方法。对旧类进行这样的实例化操作以后,该解决方案就可以沿用旧版本的方式运行。

<文档名>(旧)中的类的默认名称是 OfficeCodeBehind。在升级后的 Word 项目中,主类的默认名称是 ThisDocument。在升级后的 Excel 项目中,对于其中的代码在工作簿级别运行的类,主类的默认名称是 ThisWorkbook;对于其中的代码在工作表级别运行的类,主类的默认名称是 Sheet1、Sheet2,依此类推。

若要完成升级,必须:

  • 以手动方式将代码从旧类(默认名称为 OfficeCodeBehind)移动到新的文档类、工作簿类和工作表类,然后删除旧的代码文件。但是,如果希望现有代码维持现状,可以保留旧的代码文件,然后从新类调用该文件以便运行相应的代码。通过工具添加的所有新代码都将放入新类。

  • 按照下面的说明对您的代码进行升级。

  • 将所有 ActiveX 控件替换为托管控件。

您也可以选择:

  • 重构 C# 代码。

将代码从旧主类移动到新类

建议将代码移出旧类再移入新类,以便可以利用 Visual Studio 中的工具。这些工具在生成代码时将自动使用新类。例如,如果您将某个按钮添加到文档,然后双击该按钮以找到代码,则默认的事件处理程序将被添加到新类。

如果要对 Excel 解决方案进行升级,一定要考虑哪个类中应该包含要移动的每个方法。如果方法通常与工作簿和/或所有工作表有关,则应将代码放入 ThisWorkbook 类。如果代码与某个工作表有关(例如,工作表上控件的代码),则应将代码放入相应的工作表类。

为了帮助您入门,新的 ThisDocument 或 ThisWorkbook 类中的生成代码包含带有注释的占位符方法。这些方法的使用方式有两种,您可以任选一种:

  • 将所有代码移出旧类,然后将这些代码放入升级后的解决方案中提供的新类。

  • 编写新方法中的代码以调用旧类中的旧方法。要选用这种方式,必须更改旧类中的方法,使其不再是专用的。

示例

下面是占位符方法的示例,这些方法对旧类进行实例化并调用该类中的方法:

Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Startup

    OldCode = New OfficeCodeBehind()
    OldCode._Startup(Me.ThisApplication, Me)
End Sub

''Private Sub ThisDocument_Open() Handles MyBase.Open
''    OldCode.ThisDocument_Open()
''End Sub
''
''Private Sub ThisDocument_Close() Handles MyBase.CloseEvent
''    OldCode.ThisDocument_Close()
''End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
    OldCode = new OfficeCodeBehind();
    OldCode._Startup(this.Application, this);
}

//private void ThisDocument_Open()
//{
//    OldCode.ThisDocument_Open()
//}
//
//private void ThisDocument_Close(ref bool Cancel)
//{
//    OldCode.ThisDocument_Close(ref Cancel)
//}

所有代码移入新类后,即可移除旧类。

更新代码

如果现有代码引用 Application、调用某些时间或方法或依赖于 Open 事件,您需要对代码做出一些更改。

限定应用程序

在 Visual Studio Tools for Office 2003 版 中,Application 的非限定使用是指 System.Windows.Forms.Application 类型。在 Visual Studio Tools for Office 中,这是指 Word 或 Excel Application 对象。这就是说,要获得相同的结果,必须使用完全限定的命名空间 System.Windows.Forms.Application 来更新对 Application 的所有非限定引用。例如,如果使用 Application.Run(New Form1) 这样的代码来打开窗体,则必须将其重写为 System.Windows.Forms.Application.Run(New Form1)。

重命名事件和方法

Word 和 Excel 公开一些与对象模型中的方法同名的事件。例如,Word 文档具有一个 Close 事件和一个 Close 方法。Visual Studio Tools for Office 解决方案代码要求其中一个成员具有不同的名称;必须用新名称替换对下列成员的所有现有引用。

Word.Document

Excel.Worksheet

Excel.Workbook

Excel.Chart

处理 Open 事件

升级的项目不会引发 Open 事件(对于 Excel 工作簿)或 Open 事件(对于 Word 文档)。如果代码依赖于 Open 事件,您应当将代码移动到新 ThisWorkbook 类的 ThisWorkbook_Open() 事件处理程序(对于 Excel 工作簿)或者新 ThisDocument 类的 ThisDocument_Open() 事件处理程序(对于 Word 文档)。或者,您可从原始 OfficeCodeBehind 类的 _Startup 方法中调用 Open 事件处理程序。

将 ActiveX 控件替换为托管控件

如果在文档或工作簿中使用了 ActiveX 控件,则应删除这些控件,然后将其替换为 Visual Studio“工具箱”中的托管控件。ActiveX 控件在新的 Visual Studio Tools for Office 项目中有一定局限性;例如,不能将数据绑定到 ActiveX 控件,必须使用特殊的互操作程序集才能对这些控件进行编码。因此,不支持在新的 Visual Studio Tools for Office 项目中使用 ActiveX 控件。

重构代码(仅限 C#)

Visual Studio 提供了一些工具,帮助您组织和排列 C# 代码,这一组织和排列的过程叫做重构。在代码编辑器中打开代码文件时,将包含这些工具的“重构”菜单添加到 Visual Studio 中。有关更多信息,请参见重构

请参见

任务

如何:从 Visual Studio Tools for Office 升级解决方案

概念

Office 解决方案中的程序集概述

升级和迁移 Office 解决方案