如果你有使用下列任何功能的 Excel 或 Word 项目,则必须在目标框架更改为 .NET Framework 4 或更高版本时修改代码:
-
还必须从重定向到 .NET Framework 4 或更高版本的
Microsoft.Office.Tools.Excel.ExcelLocale1033AttributeExcel 项目中,删除Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy类的引用。 Visual Studio 不会删除此属性或类引用。
从 Excel 项目中删除 ExcelLocale1033 属性
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute已从 Visual Studio 2010 Tools for Office 运行时的部分中删除,该部分用于面向 .NET Framework 4 或更高版本的解决方案。 .NET Framework 4 及更高版本中的公共语言运行时 (CLR)始终将区域设置 ID 1033 传递给 Excel 对象模型,并且不能再使用此属性禁用此行为。 有关详细信息,请参阅 Excel 解决方案的全球化和本地化。
删除 ExcelLocale1033Attribute
在 Visual Studio 中打开项目后,打开 解决方案资源管理器。
在 “属性 ”节点(for C#)或 “我的项目 ”节点(对于 Visual Basic)下,双击 AssemblyInfo 代码文件以在代码编辑器中打开该文件。
注释
在 Visual Basic 项目中,必须单击解决方案资源管理器中的“显示所有文件”按钮才能查看 AssemblyInfo 代码文件。
找到
Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute,并将其从文件中删除或注释掉。
删除对 ExcelLocal1033Proxy 类的引用
使用 Microsoft Visual Studio 2005 Tools for the Microsoft Office System 创建的项目通过使用Application类实例化 Excel Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy 对象。 该类已从 Visual Studio 2010 Tools for Office 运行时中与 .NET Framework 4 或更高版本解决方案相关的部分中删除。 因此,必须删除或注释掉引用此类的代码行。
删除对 ExcelLocal1033Proxy 类的引用
在 Visual Studio 中打开项目,然后打开 解决方案资源管理器。
在 解决方案资源管理器中,打开 ThisAddin.cs (适用于 C#)或 ThisAddin.vb 的快捷菜单(对于 Visual Basic),然后选择 “查看代码”。
在代码编辑器的
VSTO generated code区域中,删除或注释掉以下代码行。
更新使用 GetVstoObject 和 HasVstoObject 方法的代码
在面向 .NET Framework 3.5 的项目中,GetVstoObject或者HasVstoObject方法可以作为以下本机对象之一的扩展方法:Document、Workbook、Worksheet或ListObject。 调用这些方法时,无需传递参数。 下面的代码示例演示如何在面向 .NET Framework 3.5 的 Word VSTO 外接程序中使用 GetVstoObject 方法。
Microsoft.Office.Tools.Word.Document vstoDocument =
Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();
在面向 .NET Framework 4 或更高版本的项目中,必须修改代码才能通过以下方式之一访问这些方法:
你仍然可以以扩展方法的形式访问这些方法Document,Workbook,Worksheet或ListObject对象。 但是,现在必须将由
Globals.Factory属性返回的对象传递给这些方法。你还可以访问由
Globals.Factory属性返回的对象上的这些方法。 当以这种方式访问这些方法时,必须传递您想要扩展的本机对象给该方法。Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);有关详细信息,请参阅 运行时在 VSTO 外接程序中扩展 Word 文档和 Excel 工作簿。
更新在文档级项目中使用生成的类实例的代码
在面向 .NET Framework 3.5 的文档级项目中,项目中生成的类派生自 Visual Studio Tools for Office 运行时中的以下类:
ThisDocument: DocumentThisWorkbook: WorkbookSheetn: WorksheetChartn: ChartSheet在面向 .NET Framework 4 或更高版本的项目中,上面列出的 Visual Studio Tools for Office 运行时中的类型是接口,而不是类。 面向 .NET Framework 4 或更高版本的项目中生成的类派生自 Visual Studio Tools for Office 运行时中的以下新类:
ThisDocument: DocumentBaseThisWorkbook: WorkbookBaseSheetn: WorksheetBaseChartn: ChartSheetBase如果项目中的代码引用其中一个生成的类的实例作为派生自的基类,则必须修改代码。
例如,在面向 .NET Framework 3.5 的 Excel 工作簿项目中,你可能有一个帮助程序方法,用于对项目中生成的
Sheetn 类的实例执行一些工作。
private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
// Do something to the worksheet object.
}
如果将项目重定向到 .NET Framework 4 或更高版本,则必须对代码进行以下更改之一:
修改任何调用
DoSomethingToSheet方法的代码,以便在您的项目中传递 WorksheetBase 对象的 Base 属性。 此属性返回一个 Worksheet 对象。请修改
DoSomethingToSheet方法的参数,以便其预期一个WorksheetBase对象。
更新在文档上使用 Windows 窗体控件的代码
必须在任何代码文件的顶部添加用于对Microsoft.Office.Tools.Excel或Microsoft.Office.Tools.Word命名空间的using (C#)或Imports (Visual Basic)语句,以便使用 Controls 属性以编程方式将 Windows 窗体控件添加到文档或工作表中。
在面向 .NET Framework 3.5 的项目中,添加 Windows 窗体控件的方法(例如 AddButton 方法)在 ControlCollection 和 ControlCollection 类中定义。
在面向 .NET Framework 4 或更高版本的项目中,这些方法是可在 Controls 属性上使用的扩展方法。 若要使用这些扩展方法,包含使用这些方法的代码文件必须有一个using 语句或一个Imports 语句用于Microsoft.Office.Tools.Excel或Microsoft.Office.Tools.Word命名空间。 此语句在面向 .NET Framework 4 或更高版本的新项目中自动生成。 但是,此语句不会在面向 .NET Framework 3.5 的项目中自动添加,因此在重定目标项目时必须添加它。
有关详细信息,请参阅 运行时向 Office 文档添加控件。
更新处理 Word 内容控件事件的代码
在面向 .NET Framework 3.5 的项目中,Word 内容控件的事件由泛型 EventHandler<TEventArgs> 委托处理。 在面向 .NET Framework 4 或更高版本的项目中,这些事件由其他委托处理。
下表列出了面向 .NET Framework 4 或更高版本的项目中的 Word 内容控件事件和与其关联的委托。
更新使用 OLEObject 和 OLEControl 类的代码
在面向 .NET Framework 3.5 的项目中,可以使用Microsoft.Office.Tools.Excel.OLEObject类和Microsoft.Office.Tools.Word.OLEControl类将自定义控件(例如 Windows 窗体用户控件)添加到文档或工作表中。
在面向 .NET Framework 4 或更高版本的项目中,这些类已被ControlSite和ControlSite接口替代。 必须将引用 Microsoft.Office.Tools.Excel.OLEObject 和 Microsoft.Office.Tools.Word.OLEControl 的代码修改为引用 ControlSite 和 ControlSite。 除了新名称之外,这些控件在面向 .NET Framework 3.5 的项目中,其行为方式与之前相同。
有关详细信息,请参阅 运行时向 Office 文档添加控件。
更新使用 Controls.Item(Object) 属性的代码
在面向 .NET Framework 3.5 的项目中,可以使用 Microsoft.Office.Tools.Word.Document.Controls 或集合的 Item(对象)属性来确定文档或 Microsoft.Office.Tools.Excel.Worksheet.Controls 工作表是否具有指定的控件。
在面向 .NET Framework 4 或更高版本的项目中,Item(Object) 属性已从这些集合中删除。 若要确定文档或工作表是否包含指定的控件,请改用集合Controls的 Controls Contains(System.Object) 方法。
有关文档和工作表的控件集合的详细信息,请参阅 在运行时向 Office 文档添加控件。
更新使用从 CollectionBase 派生的集合的代码
在面向 .NET Framework 3.5 的项目中,Visual Studio Tools for Office 运行时中的多个集合类型派生自 CollectionBase 类,例如 Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollection和 Microsoft.Office.Tools.Word.ControlCollection。
在面向 .NET Framework 4 或更高版本的项目中,这些集合类型现在是不派生自 CollectionBase的接口。 某些成员不再可用于这些集合类型,例如 Capacity, List和 InnerList。