C#插件系统设计

Posted

技术标签:

【中文标题】C#插件系统设计【英文标题】:C# plugin system design 【发布时间】:2010-10-25 14:25:15 【问题描述】:

所以我正在为我的应用创建一个插件系统。

我有以下组件: 1) 主要应用 2) 插件接口.dll 3) Plugin(s).dll

现在的问题是,当我创建插件并编译它们时,不仅仅是 Plugin.dll 文件。它在 Release 目录中还有其他需要的文件,例如它使用的 PluginInterface.dll、xml 配置文件等。

那么我怎样才能使它成为一个用户可以放入插件目录的单个 dll 文件?

您认为将插件放在文件夹中更好吗?然后,我必须扫描所有文件夹以查找正确的 DLL...

【问题讨论】:

【参考方案1】:

Managed Extensibility Framework 专为插件架构而设计。在您沿着当前路径走得太远之前,请先检查一下。它可能会更好地为您服务。

【讨论】:

大约四年前,我在一个项目中实现了一个自定义插件框架。我可以说我希望 MEF 那时可用。它会节省很多工作。我会推荐 MEF。【参考方案2】:

当您编译插件项目时,右键单击对您所看到的 DLL 的引用并选择属性。在属性中将“复制本地”属性设置为“假”。确保这些 DLL 是您的主应用程序的一部分,否则代码会在找不到依赖它的代码时失败。

【讨论】:

【参考方案3】:

如果您想在编译解决方案时这样做,您应该创建一个构建后事件(项目属性 -> 构建事件)以仅将所需文件复制到插件目录。 您还可以更改项目的 OutputPath 并使用“Copy Local”选项为“false”,但您不会拥有与创建构建事件相同的控制级别。

【讨论】:

以上是关于C#插件系统设计的主要内容,如果未能解决你的问题,请参考以下文章

C#课程设计:基于Access的会员管理系统

数据库大作业 C#实现驾校预约管理系统 课程设计

基于C#和RFID的智能咖啡厅系统设计与实现

基于C#和RFID的智能咖啡厅系统设计与实现

基于C#和RFID的智能咖啡厅系统设计与实现

C#课程设计之学生教务管理系统