应用程序级外接程序的体系结构

使用 Visual Studio 中的 Office 开发人员工具创建的外接程序具有强调稳定性和安全性的体系结构功能,这使这些外接程序能够与 Microsoft Office 紧密合作。 本主题介绍外接程序的以下三个方面:

  • 了解外接程序

  • 外接程序的组件

  • 外接程序如何与 Microsoft Office 应用程序协同工作

**适用于:**本主题中的信息适用于 Microsoft Office 2010 和 2007 Microsoft Office system 的应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

有关创建外接程序的常规信息,请参见 Office 解决方案开发概述应用程序级外接程序编程入门

了解外接程序

使用 Visual Studio 中的 Office 开发人员工具生成外接程序时,您会创建一个由 Microsoft Office 应用程序加载的托管代码程序集。 加载了程序集之后,外接程序可以响应在应用程序中引发的事件(例如,用户单击菜单项时引发的事件)。 外接程序也可以调入对象模型以便实现应用程序自动化和扩展应用程序,并且它可以使用 .NET Framework 中的任何类。

程序集通过应用程序的主互操作程序集与应用程序的 COM 组件通信。 有关更多信息,请参见 Office 主互操作程序集Office 解决方案开发概述

如果为应用程序安装了多个外接程序,则每个外接程序都会加载到不同的应用程序域中。 这意味着某个行为不正确的外接程序不会导致其他外接程序失败。 这还有助于确保在关闭应用程序时,所有外接程序程序集都将从内存中卸载。 有关应用程序域的更多信息,请参见 应用程序域

提示

对于使用 Visual Studio 中的 Office 开发人员工具创建的外接程序,仅当在最终用户启动宿主 Microsoft Office 应用程序时才会使用。 如果以编程方式启动应用程序(例如,使用 Automation),则外接程序可能不会按预期方式工作。

外接程序的组件

尽管外接程序程序集是主要组件,但其他一些组件对 Microsoft Office 应用程序如何发现和加载外接程序起着重要作用。

注册表项

Microsoft Office 应用程序通过查找一组注册表项来发现外接程序。 有关外接程序所使用的注册表项的完整列表,请参见应用程序级外接程序的注册表项

生成解决方案时,Visual Studio 会在开发计算机上创建所有必需的注册表项,以便您可以调试和运行外接程序。 有关更多信息,请参见 Office 解决方案生成过程概述

如果您使用 ClickOnce 部署解决方案,则由发布过程生成的安装程序会在最终用户计算机上自动创建注册表项。 有关更多信息,请参见发布 Office 解决方案

部署清单和应用程序清单

外接程序使用部署清单和应用程序清单来标识和加载外接程序程序集的最新版本。 部署清单指向当前应用程序清单。 应用程序清单指向外接程序程序集,并指定要在该程序集中执行入口点类。 有关更多信息,请参见 Office 解决方案中的应用程序和部署清单

Visual Studio Tools for Office 运行时

若要运行使用 Visual Studio 中的 Office 开发人员工具创建的外接程序,最终用户计算机必须已安装 Visual Studio Tools for Office Runtime。该运行时包含非托管组件和一组托管程序集。 非托管组件加载外接程序程序集。 托管程序集提供外接程序代码用于实现宿主应用程序自动化和扩展宿主应用程序的对象模型。

有关更多信息,请参见 Visual Studio Tools for Office Runtime 概述

外接程序如何与 Microsoft Office 应用程序协同工作

用户启动 Microsoft Office 应用程序时,该应用程序将使用部署清单和应用程序清单来定位并加载外接程序程序集的最新版本。 下图显示了这些外接程序的基本体系结构。

外接程序体系结构

2007 Office 外接程序体系结构

提示

在以 .NET Framework 4 为目标的 Office 解决方案中,解决方案会使用嵌入在解决方案程序集中的 PIA 类型信息调入宿主应用程序的对象模型,而不是直接调入 PIA。 有关更多信息,请参见设计和创建 Office 解决方案

加载过程

下面的步骤在用户启动应用程序后进行:

  1. 应用程序检查注册表中是否有标识使用 Visual Studio 中的 Office 开发人员工具创建的外接程序的项。

  2. 如果应用程序找到这些注册表项,则该应用程序将加载 VSTOEE.dll(它将加载 VSTOLoader.dll)。 这些非托管 DLL 是 Visual Studio 2010 Tools for Office Runtime 的加载程序组件。 有关更多信息,请参见 Visual Studio Tools for Office Runtime 概述

  3. VSTOLoader.dll 加载 .NET Framework 并启动 Visual Studio Tools for Office Runtime的托管部分。

  4. Visual Studio Tools for Office Runtime检查清单更新,并下载最新的应用程序和部署清单。

  5. Visual Studio Tools for Office Runtime执行一系列安全检查。 有关更多信息,请参见 保护 Office 解决方案的安全

  6. 如果外接程序受信任,可以运行,则 Visual Studio Tools for Office Runtime将使用部署清单和应用程序清单来检查程序集更新。 如果有新版本的程序集,则运行时会将新版本的程序集下载到客户端计算机上的 ClickOnce 缓存中。 有关更多信息,请参见部署 Office 解决方案

  7. Visual Studio Tools for Office Runtime创建一个要在其中加载外接程序程序集的新应用程序域。

  8. Visual Studio Tools for Office Runtime将外接程序程序集加载到应用程序域中。

  9. 如果您已重写 RequestComAddInAutomationService 方法,则 Visual Studio Tools for Office Runtime将在外接程序中调用此方法。

    您可以选择重写此方法以向其他 Microsoft Office 解决方案公开外接程序中的对象。 有关更多信息,请参见从其他 Office 解决方案调用应用程序级外接程序中的代码

  10. 如果您已重写 RequestService 方法,则 Visual Studio Tools for Office Runtime将在外接程序中调用此方法。

    您可以选择重写此方法以通过返回一个实现可扩展接口的对象来扩展 Microsoft Office 功能。 有关更多信息,请参见使用扩展性接口自定义 UI 功能

    提示

    Visual Studio Tools for Office Runtime为宿主应用程序所支持的每个可扩展接口分别调用 RequestService 方法。 尽管第一次调用 RequestService 方法通常发生在调用 ThisAddIn_Startup 方法之前,但外接程序不应对何时调用 RequestService 方法或调用多少次做出任何假设。

  11. Visual Studio Tools for Office Runtime在外接程序中调用 ThisAddIn_Startup 方法。 此方法是 Startup 事件的默认事件处理程序。 有关更多信息,请参见 Office 项目中的事件

请参见

概念

文档级自定义项的体系结构

Visual Studio Tools for Office Runtime 概述

其他资源

Visual Studio 中 Office 解决方案的体系结构

应用程序级外接程序编程

开发 Office 解决方案

保护 Office 解决方案的安全

部署 Office 解决方案