Excel VSTO如何工作?

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

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

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

根据这个 (谢谢PintSizedCat)Excel 2003发生以下情况:

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

如果有托pipe代码扩展名,应用程序将加载AddinLoader.dll。 这是一个非托pipeDLL,它是Visual Studio 2005 Tools for Office Second Edition运行时的加载程序组件。 有关更多信息,请参见Visual Studio Tools for Office Runtime概述。

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

Visual Studio Tools for Office运行时创build应用程序域,为应用程序域设置策略而不信任“我的计算机区域”,并检查代码访问安全性策略存储以查找定制程序集的策略。

.NET Frameworkvalidation大会针对策略提供的证据。 如果失败,则会引发错误。 如果通过,过程继续。

如果自定义使用部署清单,则Visual Studio Tools for Office运行时将使用它来检查程序集更新。 如果有必要更新,现在就执行。

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

Visual Studio工具用于Office运行时调用您的自定义程序集中的启动事件处理程序。 有关更多信息,请参见用于Office项目事件的Visual Studio工具。

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

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

我想这些是将VSTO运行时指向我的程序集的属性。

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

你有VSTO的安装项目吗? 在那里你可以看到设置的registry键,但是安装程序也会/也应该在GAC中注册VSTO(尽pipe不要说我的话,因为我跟VSTO有一点点关系)。

希望这有助于,我会尽力为你find更多的信息。

编辑你应该尝试阅读下面的http://msdn.microsoft.com/en-us/library/bb386298.aspx这将给你一个插件是什么的解释。 这实际上只是一个从registry中加载的COM主机的封装器,而VSTO使用一些Interoparability代码进行对话。

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