VSTO 外接程序的体系结构

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

了解 VSTO 外接程序

使用 Visual Studio 中的办公室开发人员工具生成 VSTO 外接程序时,将创建由Microsoft 办公室应用程序加载的托管代码程序集。 加载该程序集后,VSTO 外接程序可以响应在应用程序中引发的事件(例如,用户单击菜单项时)。 VSTO 外接程序还可以调用对象模型来自动执行和扩展应用程序,并可以使用 .NET Framework 中的任何类。

程序集通过应用程序的主互操作程序集与应用程序的 COM 组件进行通信。 有关详细信息,请参阅办公室主互操作程序集办公室解决方案开发概述(VSTO)。

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

注意

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

VSTO 外接程序的组件

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

注册表项

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

生成解决方案时,Visual Studio 会在开发计算机上创建所有必需的注册表项,以便你调试和运行 VSTO 外接程序。 有关详细信息,请参阅生成办公室解决方案

如果使用 ClickOnce 部署解决方案,则发布过程生成的安装程序会自动在最终用户计算机上创建注册表项。 有关详细信息,请参阅使用 ClickOnce 部署办公室解决方案。

部署清单和应用程序清单

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

Visual Studio Tools for Office Runtime

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

有关详细信息,请参阅 Visual Studio Tools for 办公室 运行时概述

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

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

2007 Office add-in architecture

注意

在面向 .NET Framework 4 或 .NET Framework 4.5 的办公室解决方案中,解决方案通过使用嵌入在解决方案程序集中的 PIA 类型信息(而不是直接调用 PIA)调用主机应用程序的对象模型。 有关详细信息,请参阅设计和创建办公室解决方案

加载过程

用户启动应用程序时,会执行以下步骤:

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

  2. 如果应用程序找到这些注册表项,则该应用程序加载 VSTOEE.dll,后者会加载 VSTOLoader.dll。 这些非托管 DLL 是 Visual Studio 2010 Tools for Office Runtime 的加载程序组件。 有关详细信息,请参阅 Visual Studio Tools for 办公室 运行时概述

  3. VSTOLoader.dll 加载 .NET Framework,并启动 Visual Studio Tools for 办公室 运行时的托管部分。

  4. 用于办公室运行时的 Visual Studio 工具检查清单更新,并下载最新的应用程序和部署清单。

  5. 用于办公室运行时的 Visual Studio 工具执行一系列安全检查。 有关详细信息,请参阅安全办公室解决方案

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

  7. 用于办公室运行时的 Visual Studio 工具将创建一个新的应用程序域,用于在其中加载 VSTO 外接程序程序集。

  8. Visual Studio Tools for 办公室 运行时将 VSTO 外接程序程序集加载到应用程序域中。

  9. Visual Studio Tools for 办公室 运行时在 VSTO 外接程序中调用RequestComAddInAutomationService该方法(如果已重写该方法)。

    可以选择重写此方法,以向其他 Microsoft Office 解决方案公开 VSTO 外接程序中的对象。 有关详细信息,请参阅来自其他办公室解决方案的 VSTO 外接程序中的调用代码。

  10. Visual Studio Tools for 办公室 运行时在 VSTO 外接程序中调用RequestService该方法(如果已重写该方法)。

    可以选择替代此方法,以便通过返回实现扩展性接口的对象来扩展 Microsoft Office 功能。 有关详细信息,请参阅 使用扩展性接口自定义 UI 功能。

    注意

    Visual Studio Tools for 办公室 运行时针对主机应用程序支持的每个扩展性接口分别调用RequestService该方法。 尽管对 RequestService 方法的第一次调用通常发生在调用 ThisAddIn_Startup 方法之前,但 VSTO 外接程序不应作出有关 RequestService 方法的调用时间和次数的任何假设。

  11. Visual Studio Tools for 办公室 运行时调用 ThisAddIn_Startup VSTO 外接程序中的方法。 此方法是 Startup 事件的默认事件处理程序。 有关详细信息,请参阅办公室项目中的事件。