【发布时间】:2013-01-10 19:32:21
【问题描述】:
我有一个可以动态运行多个插件的应用程序。安装应用程序后,用户只需将相应的插件放入安装目录,程序就会根据界面动态加载它们。
我遇到的问题是插件引用了主应用程序中的一个库来访问正确的界面并共享全局设置。我希望能够随时添加插件,而无需用户重新安装。但是,由于插件引用了一个库,当我尝试加载它们时,我收到了错误:
Could not load file or assembly 'program', Version=0.1.0.24838, Culture=neutral, PublicKeyToken=623917...' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
我知道如果我将所有插件添加到安装程序中可以避免此错误,但如果我稍后添加新插件,用户将不得不卸载并重新安装。动态加载插件的原因是用户只需放入一个新插件,它就可以工作了。
有没有办法让插件引用主应用程序中的对象而不用担心应用程序的版本?
谢谢。
【问题讨论】:
-
这是非常经典的 DLL Hell,插件有一个依赖程序集,但 CLR 发现了一个版本号错误的程序集。您可能需要重新考虑“将程序集放在文件夹中”的方法。
标签: c# plugins dynamic-loading