从 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
对于 Close 事件,请使用 CloseEvent。
对于 Sync 事件,请使用 SyncEvent。
Excel.Worksheet
对于 Activate 事件,请使用 ActivateEvent。
对于 Calculate 方法,请使用 CalculateMethod。
Excel.Workbook
对于 Activate 事件,请使用 ActivateEvent。
对于 Sync 事件,请使用 SyncEvent。
Excel.Chart
对于 Activate 事件,请使用 ActivateEvent。
对于 Select 事件,请使用 SelectEvent。
处理 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 升级解决方案