【发布时间】: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