类型与运行时加载的程序集

时间:2015-09-04 18:23:28

标签: c# plugins reflection

我正在编写一个用于测试目的的插件架构(我知道有框架可以做到这一点),这就是我现在所做的:

我有一个由主程序和插件dll共享的公共库,我称之为PluginBase程序集。

该程序集在MyPlugin文件夹中的插件Debug\Plugins中引用。

它也在主程序中引用,该程序位于文件夹Debug

问题是,当我动态加载PluginBase中包含的接口时,它从位于Type的程序集中获取接口的Debug\Plugins对象。 但是当我尝试在主程序中使用相同的接口(IMyPlugin)时,它会从位于PluginBase文件夹中的Debug程序集加载它。

当我尝试在主程序中使用该接口时,这会导致无效的强制转换异常。

文件夹结构:

\Debug\MainProgram.exe
\Debug\PluginBase.dll
\Debug\Plugins\MyPlugin.dll
\Debug\Plugins\PluginBase.dll

加载的场景是:

  • ServiceProvider加载插件定义,ans还动态加载PluginBase程序集中包含的接口(位于Debug\Plugins
  • 主程序调用{​​{1}}来获取特定接口(但这次是从ServiceProvider文件夹加载的)
  • 接口的类型不匹配(即使它们是相同的)....

我尝试在Debug文件夹中找到PluginBase dll,但是由于Debug dll在编译后被复制到PluginBase文件夹,因此我遇到了编译问题我的插件项目。 此外,我认为这不是一个干净的方法。

有没有办法克服这个问题? (比如可能以某种方式设置构建顺序?)

0 个答案:

没有答案