插件/工作台框架是Eclipse RCP的最佳.NET替代方案



我正在寻找一个基于插件的应用程序框架,它可以与Eclipse插件框架相媲美,在我看来,它包括:

  1. 一个核心的插件管理框架(Equinox/OSGI),它提供了声明扩展端点,然后发现和加载为这些端点服务的插件的能力。(这与依赖注入不同,但无可否认的是,差异是微妙的-配置高度去中心化,存在版本控制问题,它可能涉及在线插件存储库,对我来说最重要的是,用户应该很容易添加插件,而无需了解底层架构/配置文件)
  2. 提供基本工作台外壳的许多插件层,具有并发支持、命令、首选项表、菜单、工具栏、键绑定等

这只是触及RCP的表面,RCP本身是作为应用程序的基础,您可以通过编写/组装更多插件来构建应用程序。


这是我过去几天从互联网上收集到的。。。

据我所知,在.NET世界中,没有任何东西能够远程接近Eclipse RCP for Java的健壮性和成熟度,但有几个竞争者做得很好,要么是#1,要么是#2。

(我还应该提到,我还没有对WinForms和WPF做出最终决定,所以我也在努力了解任何候选框架中的UI耦合水平。我还想知道平台耦合和源代码授权)

我必须说,开源的东西通常文档较少,但更容易理解,而MS的东西通常有更多的文档,但不太容易访问,所以对于许多MS技术,我想知道它们在实际意义上到底做了什么。

这些是我找到的库:

SharpDevelop

我看的第一件事是SharpDevelop,它以一种基本的方式同时做#1和#2(这不是对SharpDevelopment的侮辱,这是令人钦佩的——我只是说比Eclipse RCP更基本)。然而,SharpDevelop不仅仅是一个框架,它还是一个应用程序,而且有一些基本的假设和限制(即与WinForms有一定的耦合)。尽管如此,CodeProject上仍有一些文章解释了如何将其用作应用程序的基础。

系统附加项

似乎System.Addins旨在提供一个强大的外接程序加载框架,提供一些复杂的选项,用于加载具有不同信任级别的程序集,甚至运行进程外程序。它似乎主要是基于代码的,而且代码量很大,有很多程序集用于隔离版本控制问题。,使用Guidance Automation生成大量代码。

到目前为止,我还没有找到很多System.AddIns文章来说明如何使用它来构建类似Eclipse RCP的东西,而且许多人似乎对它的复杂性感到绝望。

Mono.Addins

Mono.Addins似乎受到了System.Addins、SharpDevelop和MonoDevelop的影响。它似乎提供了System.Addins的基本功能,插件加载选项不那么复杂,但更简单,具有基于属性的注册、XML清单和在线插件存储库的基础设施。

它有一个非常好的FAQ和文档,还有一组非常健壮的示例,这些示例确实有助于描绘如何开发SharpDevelop或Eclipse这样的体系结构。示例使用GTK作为UI,但框架本身并没有与GTK耦合。因此,它似乎很好地完成了#1(加载外接程序),并为#2(工作台框架)指明了方向。看起来Mono.Addins是从MonoDevelop派生而来的,但我还没有真正研究MonoDevelopment是否提供了一个好的核心工作台框架。

托管扩展性框架

这就是目前每个人都在谈论的内容,它的作用也慢慢变得越来越清楚,但即使在阅读了SO上的几篇帖子后,我仍然很模糊。官方的说法是,它"可以与System.Addins共存"。然而,它没有引用它,它似乎复制了它的一些功能。因此,在我看来,它是System.Addins.的一个更简单、更容易访问的替代方案

它看起来更像Mono.Addins,因为它提供了基于属性的连接。它提供了可以基于属性或基于目录的"目录"。它似乎没有提供任何基于XML或清单的连接。到目前为止,我还没有找到太多的文档,这些例子似乎有点"神奇",更让人想起基于属性的DI,尽管有人澄清MEF不是DI容器。

它的许可证刚刚开放,但它确实引用了WindowsBase——不确定这是否意味着它与Windows耦合。

卫城

我不确定这是什么。是MEF,还是即将到来的东西?

复合应用程序块

WPF和Winforms复合应用程序块似乎提供了更多的工作台框架。我对这些没有什么经验,但它们似乎在很大程度上依赖于制导自动化,显然与UI层相结合。有一些将MEF与这些应用程序块相结合的例子。


我已经尽我所能在这里回答了我自己的问题,但我真的只是触及了表面,我没有使用这些框架的经验。希望你们中的一些人能添加更多关于您有经验的框架的细节。如果我们最终能得到某种比较矩阵,那就太好了。

可以考虑。。。

WPF和Silverlight 的复合应用指南

Visual Studio 2008 Shell

您真的应该看看Visual Studio Shell。它既可以在集成模式下使用,在集成模式中,应用程序作为插件驻留在visualstudio旁边,也可以在隔离模式中使用shell,在隔离模式下,shell只是作为应用程序的基本框架,类似于Eclipse shell。查看此网页。

Visual Studio外壳健壮、功能丰富且免费。我还没有对它进行任何开发,但我一直在为即将到来的项目寻找它。它看起来和Eclipse一样强大。

+1用于SharpDevelop。这些库写得很好,扩展起来也很简单。实际上,我正在使用SharpDevelop核心及其Addin基础设施编写自己的代码重构应用程序。

非常好。

-Doug

虽然我不熟悉RCP的细节,但我认为DxCore可能是用托管代码扩展Visual Studio的最完整的框架。它使用基于插件的体系结构,使您能够创建任何东西,从工具窗口(托管您想要的任何代码)到"操作"(可以绑定到键盘快捷键和上下文菜单的项目)和重构,具有极其丰富的上下文系统和语言不可知的代码生成引擎。它在Visual Studio相当可怕的底层之上提供了一个非常好的抽象层。它也是版本无关的,所以针对DxCore编写的插件将适用于VS2005和VS2008。

虽然它是免费的,但它不是开源的,而且遗憾的是,文档很少。您已经提供了示例,这是一个良好的开端,但这里还有一些其他有用的资源:

  • Mark Miller是DxCore/CodeRush/Refactor Pro的架构师!,并在他的博客(以及DNR电视节目)上发布了一些关于编写DxCore插件的帖子
  • 有一个社区论坛,你可以在那里发布问题。紧随其后的是Mark和其他一些DxCore开发人员,以及社区中的一些人
  • 谷歌代码上的DxCore插件。尝试将社区创建的插件收集到一个地方。这是一个很好的工具和重构的混合体,尽管有些已经过时了

希望这对您有用。关于它,我不得不说的唯一一件非常糟糕的事情是,它可能没有得到更广泛的利用,因为它是一个如此大的库,几乎没有文档,你必须愿意挖掘,以找出如何利用一些更酷的功能。

祝你好运!

我刚刚发布了SoapBox Core作为开源,并写了一篇关于CodeProject的介绍性文章。这基本上就是你想要的。它使用MEF进行扩展,我从SharpDevelop那里得到了很多想法。请注意,它是全新的,而且仍在快速发展。

最新更新