c#插件系统问题

c#插件系统问题,c#,plugins,interface,types,C#,Plugins,Interface,Types,所以我实现了一个非常简单的插件系统 我有以下集会: MainApp IPlugin PluginApp MainApp和PluginApp都包含在对IPlugin的引用中。现在,在MainApp中,我扫描一个plugins文件夹,搜索实现IPlugin界面的东西 但是,它不起作用,因为MainApp和PluginApp都引用了自己的IPlugin.dll副本,所以在使用Type.IsAssignableFrom()时,它们不会被识别为匹配项。 帮助?您可以尝试将定义插件的代码放入附属dll程序

所以我实现了一个非常简单的插件系统

我有以下集会:

MainApp
IPlugin
PluginApp
MainApp
PluginApp
都包含在对
IPlugin
的引用中。现在,在
MainApp
中,我扫描一个plugins文件夹,搜索实现
IPlugin
界面的东西

但是,它不起作用,因为
MainApp
PluginApp
都引用了自己的
IPlugin.dll
副本,所以在使用
Type.IsAssignableFrom()时,它们不会被识别为匹配项。


帮助?

您可以尝试将定义插件的代码放入附属dll程序集中。这样,主代码和插件都引用相同的类型


如果插件可以维护自己的dll,而不是使用与应用程序相同的dll,那么您将遇到版本控制问题。你的主应用程序将如何处理不实现相同接口的调用插件

当我们在自己的软件中这样做时,我们不得不求助于反射方法调用,而不是转换到接口。这并不优雅



如何将程序集dll添加到插件目录中。他们在创建应用程序时必须引用dll,但在插件实际运行时,他们必须使用dll的主程序集版本?

你能解释一下他们“引用自己的IPlugin.dll副本”的意思吗?为什么会有不同的
IPlugin.dll
s?IPlugin.dll包含插件必须实现的接口。所以每个创建插件的人都必须在他们的项目中包含这个插件。然后,在我的主应用程序中,我还必须包括这个。如果我从插件构建中删除IPlugin.dll,它将正常工作。但是,我无法控制DLL插件创建者包含的内容-因此我认为这不是一个好的解决方案(比如,如果有人包含DLL,我的应用程序就不会崩溃)。呃…我使用了错误的术语。卫星装配实际上是用来存放资源的。我指的是一个可以承载接口代码的程序集,但它不会硬编码到主程序集中。实际上我已经在这样做了(IPlugin.dll)。如何确保插件创建者使用我的dll?如果有人碰巧在他们的项目中包含了他们自己的dll,我如何防止我的应用程序崩溃?编译主应用程序时,在对iplugin dll的引用中将特定版本属性设置为true。如果没有正确的版本,您的应用程序将无法启动。插件dll项目的特定版本属性不应设置为true。