8

Excel VSTO 如何工作?如果我在 Visual Studio 2005 中创建 Excel 工作簿解决方案,我就可以愉快地编写代码并完全访问 Excel 对象模型,甚至可以将 Excel 工作表视为设计图面。当我构建解决方案时,我得到一个.XLS文件和一个.DLL(包含我的 C# 代码)。

我现在可以通过双击来启动 Excel 工作表,.XLS并且我的工作表可以使用我的所有 C# 代码和我放在工作表上的任何控件等运行。

工作表是如何引用的.DLL?excel 工作簿/工作表的哪一部分告诉它需要启动 CLR 并托管我的程序集?

4

2 回答 2

7

根据这个(感谢 PintSizedCat)对于 Excel 2003,会发生以下情况:

Microsoft Office 应用程序检查自定义文档属性以查看是否存在与文档关联的托管代码扩展。有关详细信息,请参阅自定义文档属性概述。

如果存在托管代码扩展,则应用程序会加载 AddinLoader.dll。这是一个非托管 DLL,它是 Visual Studio 2005 Tools for Office Second Edition 运行时的加载器组件。有关详细信息,请参阅用于 Office 运行时概述的 Visual Studio 工具。

AddinLoader.dll 加载 .NET Framework 并启动 Visual Studio Tools for Office 运行时的托管部分。

Visual Studio Tools for Office 运行时创建应用程序域,为应用程序域设置策略以不信任我的电脑区域,并检查代码访问安全策略存储以查找自定义程序集的策略。

.NET Framework 根据策略验证程序集提供的证据。如果失败,则会引发错误。如果通过,则该过程继续。

如果自定义项使用部署清单,则 Visual Studio Tools for Office 运行时使用它来检查程序集更新。如果需要任何更新,则立即执行。

Visual Studio Tools for Office 运行时将程序集加载到应用程序域中。

Visual Studio Tools for Office 运行时调用自定义程序集中的启动事件处理程序。有关详细信息,请参阅用于 Office 项目事件的 Visual Studio 工具。

在我的测试项目的 Excel 工作簿中,我有两个自定义属性:

_AssemblyName,值 = * _AssemblyLocation,值 = {533b2c13-a125-418a-bfff-9546b0762807}

我想这些是将 VSTO 运行时引导到我的程序集的属性。

于 2009-02-11T10:23:04.780 回答
6

这一切都在注册表中完成,您应该能够在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel或您的等效应用程序中找到密钥。我对在注册表中其他地方注册的 COM 插件有更多的经验。这个键下面应该有一个 LoadBehaviour 项,用于确定应用程序是如何加载的(2 是手动加载,3 是启动时自动加载)。

您有 VSTO 的安装项目吗?在那里你可以看到设置的注册表项,但安装程序将/应该也注册 GAC 中的 VSTO(尽管不要相信我的话,因为我对 VSTO 有点动摇,正如我所说的)。

希望这会有所帮助,我将尝试为您找到更多信息。

编辑您应该尝试阅读以下http://msdn.microsoft.com/en-us/library/bb386298.aspx,它将为您解释插件是什么。它实际上只是一个从注册表加载的 COM 主机的包装器,VSTO 使用一些互操作性代码与之对话。

http://msdn.microsoft.com/en-us/library/23cw517s.aspx也很有用(Visual Studio Tools for Office 入门,不要敲它,因为它说入门,有很多有用的信息在那里)和http://msdn.microsoft.com/en-us/library/hy7c6z9k.aspx(从第一个链接开始,是 VSTO 插件的概述)。

于 2009-02-11T09:48:33.037 回答