【问题标题】:VSTO addin dependency resolutionVSTO 插件依赖解析
【发布时间】:2011-04-06 06:19:37
【问题描述】:

我有一个 VSTO 插件,它工作正常。我试图给它一个插件加载机制,以便其他人可以将插件添加到我的插件中。我知道这听起来很可怕,但它似乎是目前最好的选择。

我将插件发布到名为“已发布”的文件夹中。这将创建应用程序清单 (Symbols.application) 以及一个名为 Symbols_x.y.xx.yy 的文件夹,其中包含实际的插件程序集。每次我发布时,Visual Studio 都会增加这个版本号,因此程序集不会出现在同一个地方两次。

插件位于 Published\Plugins 文件夹中。我使用 Assembly.LoadFile(string) 加载插件程序集,这工作正常。插件都在文件夹中,无论我发布多少次,它都保留在同一个位置,我可以扫描该文件夹中的 DLL 并加载它们。

当这些插件 DLL 具有依赖项时,不起作用。特别是,一个依赖于 COM 对象。 Visual Studio 构建了一个自动互操作 DLL,它与相应的插件 DLL 一起放在 Published\Plugins 文件夹中。只要尝试访问 COM 对象,就会引发异常,指出无法找到互操作程序集。

将互操作 DLL 放入文件夹 Published\Symbols_x.y.xx.yy 文件夹是可行的,但这需要每次都手动将其放在那里。我已经尝试将插件添加到 AppDomain 的 PrivateBinPath,但文档说 ApplicationBase 之外的任何内容都将被忽略,看起来确实如此 - 它不起作用。 ApplicationBase 设置为 Published\Symbols_x.y.xx.yy。

在我看来我有四个选择:

  • 弄清楚如何更改 ApplicationBase,将其上移一级,然后将 Published\Plugins 文件夹添加到 AppDomain 的 PrivateBinPath。
  • 对应用程序清单进行一些更改,以指示可以从 Published\Plugins 自动加载程序集。
  • 找到其他方法将程序集显式加载到 AppDomain 中,而不仅仅是使用 Assembly.LoadFile 加载到内存中。
  • 还有其他人想提出的建议!

但我找不到任何方法让这些选项中的任何一个起作用。救命!

【问题讨论】:

    标签: plugins assemblies vsto appdomain add-in


    【解决方案1】:

    解决方案由 MSDN 论坛提供:

    我已向 AppDomain.CurrentDomain.AssemblyResolve 添加了一个事件处理程序。这使您有机会以您喜欢的任何方式加载程序集,包括从我的插件目录加载它。

    【讨论】:

      猜你喜欢
      • 2018-02-27
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多