文档级自定义项的体系结构
更新:2007 年 11 月
适用对象 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 项目类型
Microsoft Office 版本
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
Visual Studio Tools for Office 包括用于为 Microsoft Office Word 和 Microsoft Office Excel 创建文档级自定义项的项目。本主题描述 Visual Studio Tools for Office 自定义项的以下方面:
了解自定义项
自定义项的组成部分
自定义项如何与 2007 Microsoft Office system 协同工作
自定义项如何与 Microsoft Office 2003 协同工作
有关使用 Visual Studio Tools for Office 自定义项的一般信息,请参见 Office 解决方案开发概述、Word 文档级自定义项编程入门和Excel 文档级自定义项编程入门。
了解自定义项
使用 Visual Studio Tools for Office 生成自定义项时,将创建一个与特定文档关联的托管代码程序集。带有链接程序集的文档或工作簿被认为具有托管代码扩展。有关更多信息,请参见 Office 解决方案中的程序集概述。
当用户打开文档时,Microsoft Office 应用程序将加载程序集。加载了程序集后,自定义项将能在文档处于打开状态时对事件做出响应。自定义项也可以调入对象模型,以便在文档处于打开状态时自动处理和扩展应用程序,并且,自定义项可以使用 .NET Framework 中的任何类。
程序集通过应用程序的主互操作程序集与应用程序的 COM 组件通信。有关更多信息,请参见 Office 主互操作程序集和 Office 解决方案开发概述。
Visual Studio Tools for Office 在不同的应用程序域中加载每个程序集。这意味着,一个行为不正确的解决方案不会导致其他解决方案失败。它还可确保在关闭文档时,将关闭所有代码并从内存中卸载程序集。文档级自定义项设计为与单个应用程序域中的单个文档协同工作。它们不是为跨文档通信而设计的。有关应用程序域的更多信息,请参见应用程序域概述。
说明: |
---|
在设计上,使用 Visual Studio Tools for Office 创建的文档级自定义项只有在应用程序由最终用户启动时才有用。如果以编程方式(例如,使用 Automation)启动应用程序,自定义项可能无法按预期方式工作。 |
设计时和运行时体验
理解 Visual Studio Tools for Office 解决方案的体系结构可帮助理解设计解决方案和运行解决方案的体验。
设计时
设计时体验包括下列步骤:
开发人员在 Visual Studio 中创建文档级项目。该项目包括文档和在该文档后端运行的程序集。该文档可以是已存在的文档(多半是由设计人员创建的),或者也可以随项目创建一个新文档。
设计人员(创建该项目的开发人员或其他人)为最终用户创建该文档的最后外观。
运行时
运行时体验包括下列步骤:
最终用户打开具有托管代码扩展的文档或工作簿。
文档或工作簿加载编译过的程序集。
当用户在文档或工作簿中工作时,程序集对事件做出响应。
从开发人员和最终用户的角度进行比较
由于开发人员主要在 Visual Studio 中工作,而最终用户在 Word 或 Excel 中工作,因此可通过两种方式来理解文档级自定义项。
开发人员的角度 |
最终用户的角度 |
---|---|
开发人员使用 Visual Studio 编写 Word 和 Excel 可以访问的代码。 尽管开发人员似乎在创建一个运行 Word 或 Excel 的可执行文件,但实际的工作方式却不是这样的。文档与一个程序集相关联,并包含指向该程序集的指针。打开文档时,Word 或 Excel 定位该程序集并针对所有已处理的事件运行代码。 |
使用解决方案的人只需像打开任何其他 Microsoft Office 文件一样打开文档或工作簿(或依据模板创建新文档)。 程序集在文档或工作簿中提供自定义项,例如用当前数据自动填充它,或显示对话框以请求输入信息。 |
支持的文档级自定义项文档格式
在创建自定义项项目时,您可以选择要在项目中使用的文档的格式。有关更多信息,请参见如何:创建 Visual Studio Tools for Office 项目。
下表列出了可在 Excel 文档级自定义项中使用的文档格式。
Excel 2007 |
Excel 2003 |
---|---|
Excel 工作簿 (.xlsx) 启用宏的 Excel 工作簿 (.xlsm) Excel 二进制工作簿 (.xlsb) Excel 97-2003 工作簿 (.xls) Excel 模板 (.xltx) 启用宏的 Excel 模板 (.xltm) Excel 97-2003 模板 (.xlt) |
Excel 工作簿 (.xls) Excel 模板 (.xlt) |
下表列出了可在 Word 文档级自定义项中使用的文档格式。
Word 2007 |
Word 2003 |
---|---|
Word 文档 (.docx) 启用宏的 Word 文档 (.docm) Word 97-2003 文档 (.doc) Word 模板 (.dotx) 启用宏的 Word 模板 (.dotm) Word 97-2003 模板 (.dot) |
Word 文档 (.doc) Word 模板 (.dot) |
如果您基于在 Microsoft Office 2003 中创建的文档创建 2007 Microsoft Office 自定义项,Visual Studio Tools for Office 不会更改文档的文件格式。
您只应为受支持格式的文档设计托管代码扩展。否则,在应用程序中打开文档时可能无法引发某些事件。例如,当您对以 Excel XML 电子表格格式或网页(.htm、.html)格式保存的工作簿使用托管代码扩展时,并不会引发 Open 事件。
对具有 .xml 文件扩展名的 Word 文档的支持
Word 2003 和 Word 2007 的文档级项目模板不允许您基于下列文件格式创建项目:
Word XML 文档 (*xml)。
Word 2003 XML 文档 (*xml)。
如果想要最终用户在这些文件格式中使用自定义项,请生成并部署使用上表中指定的某个支持的文件格式的自定义项。安装了该自定义项后,最终用户可以用 Word XML 文档 (*xml) 格式(对于 Word 2007)或 Word 2003 XML 文档 (*xml) 格式(对于 Word 2003)保存文档,并且自定义项将继续按预期方式工作。
自定义项的组成部分
自定义项的主要组成部分是文档和程序集。除了这些组成部分外,还有一些其他部件在 Microsoft Office 应用程序发现并加载自定义项的过程中扮演着重要的角色。
部署清单和应用程序清单
自定义项使用部署清单和应用程序清单来标识和加载自定义项程序集的最新版本。部署清单指向当前应用程序清单。应用程序清单指向自定义项程序集,并指定要在该程序集中执行的一个(或多个)入口点类。有关更多信息,请参见 Office 解决方案中的应用程序和部署清单。
Visual Studio Tools for Office 运行时
若要运行使用 Visual Studio Tools for Office 创建的自定义项,最终用户计算机必须安装有 Visual Studio Tools for Office 运行时。Visual Studio Tools for Office 运行时包括用于加载自定义项程序集的非托管组件,同时还包括一组托管程序集。这些托管程序集提供自定义项代码用于自动处理和扩展宿主应用程序的对象模型。
有关更多信息,请参见 Visual Studio Tools for Office 运行库概述。
自定义项如何与 2007 Microsoft Office system 协同工作
当用户打开属于 2007 Microsoft Office 自定义项的文档时,应用程序将使用链接到文档的部署清单来查找并加载自定义项程序集的最新版本。部署清单的位置存储在名为 _AssemblyLocation 的自定义文档属性中。标识此位置的字符串是在生成解决方案时插入该属性中的。
部署清单指向应用程序清单,后者随后指向最新的程序集。有关更多信息,请参见 Office 解决方案中的应用程序和部署清单。
下图显示了 2007 Microsoft Office system 文档自定义项的基本体系结构。
2007 Microsoft Office system 的自定义项体系结构
2007 Microsoft Office System 中自定义项的加载过程
当用户打开属于 2007 Microsoft Office 解决方案的文档时,会发生以下步骤:
Microsoft Office 应用程序检查自定义文档属性,以确定是否有与文档关联的托管代码扩展。有关更多信息,请参见 自定义文档属性概述。
如果存在托管代码扩展,应用程序将加载 VSTOEE.dll,后者将加载 VSTOLoader.dll。这些非托管 DLL 是 Microsoft Visual Studio Tools for the Microsoft Office system(3.0 版运行时) 的加载程序组件。有关更多信息,请参见 Visual Studio Tools for Office 运行库概述。
VSTOLoader.dll 加载 .NET Framework 并启动 Visual Studio Tools for Office 运行时的托管部分。
如果从非本地计算机的位置中打开文档,Visual Studio Tools for Office 运行时将验证文档的位置是否位于该特定 Office 应用程序的“信任中心设置”中的“受信任位置”列表中。如果文档位置不在受信任位置中,自定义项将不会得到信任,并且加载过程将在此处停止。
Visual Studio Tools for Office 运行时将安装解决方案(如果尚未安装)、下载最新的应用程序和部署清单,并执行一系列安全检查。有关更多信息,请参见 Office 解决方案中的安全性 (2007 System)。
如果自定义项受信任可以运行,则 Visual Studio Tools for Office 运行时将使用部署清单和应用程序清单来检查程序集更新。如果有新版本的程序集,则运行时会将新版本的程序集下载到客户端计算机上的 ClickOnce 缓存中。有关更多信息,请参见部署 Office 解决方案 (2007 System)。
Visual Studio Tools for Office 运行时将创建一个要在其中加载自定义项程序集的新应用程序域。
Visual Studio Tools for Office 运行时会将自定义项程序集加载到该应用程序域中。
Visual Studio Tools for Office 运行时将在自定义项程序集中调用 Startup 事件处理程序。有关更多信息,请参见 Visual Studio Tools for Office 项目事件。
自定义项如何与 Microsoft Office 2003 协同工作
当用户打开属于 Microsoft Office 2003 自定义项的文档时,应用程序将使用嵌入文档中的应用程序清单来查找并加载自定义项程序集的最新版本。嵌入的应用程序清单可以直接指向程序集,也可以指向用于查找程序集更新的部署清单。有关更多信息,请参见 Office 解决方案中的应用程序和部署清单。
嵌入的应用程序清单包含在一个名为“运行时存储控件”的不可见嵌入控件中。有关更多信息,请参见 运行时存储控件概述。
下图显示了 Microsoft Office 2003 文档自定义项的基本体系结构。
Microsoft Office 2003 的自定义项体系结构
Microsoft Office 2003 中自定义项的加载过程
当用户打开属于 2003 Microsoft Office 解决方案的文档时,会发生以下步骤:
Microsoft Office 应用程序检查自定义文档属性,以确定是否有与文档关联的托管代码扩展。有关更多信息,请参见 自定义文档属性概述。
如果存在托管代码扩展,应用程序将加载 AddinLoader.dll。此非托管 DLL 是 Visual Studio 2005 Tools for Office Second Edition 运行时的加载程序组件。有关更多信息,请参见 Visual Studio Tools for Office 运行库概述。
AddinLoader.dll 加载 .NET Framework 并启动 .NET Framework 运行时的托管部分。
Visual Studio Tools for Office 运行时创建一个应用程序域,将该应用程序域的策略设置为不信任“我的电脑区域”,并检查代码访问安全策略存储区以查找自定义项程序集的策略。
.NET Framework 根据策略验证程序集提供的证据。如果验证失败,则引发一个错误。如通过验证,则继续该过程。
如果自定义项使用部署清单,则 Visual Studio Tools for Office 运行时将使用它来检查程序集更新。如果有必要更新,则立即更新。
Visual Studio Tools for Office 运行时将程序集加载到应用程序域中。
Visual Studio Tools for Office 运行时将在自定义项程序集中调用 Startup 事件处理程序。有关更多信息,请参见 Visual Studio Tools for Office 项目事件。
请参见
概念
Visual Studio Tools for Office 运行库概述
在 Visual Studio 中创建 Office 解决方案