【问题标题】:How does Excel VSTO Work?Excel VSTO 如何工作?
【发布时间】:2009-02-11 09:43:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# excel vsto clr-hosting


    【解决方案1】:

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

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

    如果有托管代码扩展, 应用程序加载 AddinLoader.dll。 这是一个非托管 DLL,它是 Visual Studio 的加载器组件 2005 年 Office 第二版工具 运行。有关详细信息,请参阅 适用于 Office 运行时的 Visual Studio 工具 概览。

    AddinLoader.dll 加载 .NET 框架并启动托管 Visual Studio 工具的一部分 Office 运行时。

    Office 的 Visual Studio 工具 运行时创建一个应用程序域, 为应用程序域设置策略 不要相信我的电脑区,以及 检查代码访问安全策略 商店查找政策 定制组装。

    .NET Framework 验证 大会提出的证据 反对政策。如果失败,一个 引发错误。如果通过,则 进程继续。

    如果自定义使用部署 清单,Visual Studio 工具 Office 运行时使用它来检查 装配更新。如果有任何更新 必要的,它们现在被执行。

    Office 的 Visual Studio 工具 运行时将程序集加载到 应用领域。

    Office 的 Visual Studio 工具 运行时调用 Startup 事件 自定义处理程序 部件。有关详细信息,请参阅 适用于 Office 项目的 Visual Studio 工具 事件。

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

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

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

    【讨论】:

      【解决方案2】:

      这一切都在注册表中完成,您应该能够在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 插件的概述)。

      【讨论】:

      • 我查看了 reg 键,我的 VSTO .Net 项目没有任何内容(有一个 N 'Addins' 子目录和其他 2 个插件)。我的 VSTO 还没有设置项目。
      • 可能在HKEY_CURRENT_USER下
      猜你喜欢
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 2011-01-23
      • 2016-07-04
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多