文档介绍:目录序 2一、基本概念 2二、主程序 5三、插件系统 7SharpDevelop的AddInTreeView插件 20转载:http://blog./passos/article/details/124722序   ,遇到了一个比较不错的开源的IDESharpDevelop。这个开发工具是使用C#开发的,比较吸引我的一点就是它是采用了和Eclipse类似的插件技术来实现整个系统的。而这个插件系统是我最感兴趣的地方,因此开始了一段代码的研究。在本篇之后,我会陆续把我研究的心得写下来。由于是在网吧上网,有诸多不便,因此可能会拖比较长的时间。一、基本概念   首先,我们先来对SharpDevelop有一个比较感性的认识。你可以从这里下载到它的可执行程序和代码包    / ,安装的废话就不说了,先运行一下看看。感觉跟VS很像吧?,还有很多地方需要完善。关于代码和系统结构,SharpDevelop的三个作者写了一本书,各位看官可以参考一下,不过我看过之后还是有很多地方不太理解。   然后,让我来解释一下什么叫插件以及为什么要使用插件系统。我们以往的系统,开发人员编译发布之后,系统就不允许进行更改和扩充了,如果要进行某个功能的扩充,则必须要修改代码重新编译发布。这就给我们带来了比较大的不方便。解决的方法有很多,例如提供配置等等方法。在解决方案之中,插件是一个比较好的解决方法。大家一定知道PhotoShop、WinAmp吧,他们都有“插件”的概念,允许其他开发人员根据系统预定的接口编写扩展功能(例如PhotoShop中各种各样的滤镜)。所谓的插件就是系统的扩展功能模块,这个模块是以一个独立文件的形式出现的,与系统是相对独立。在系统设计期间并不知道插件的具体功能,仅仅是在系统中为插件留下预定的接口,系统启动的时候根据插件的配置寻找插件,根据预定的接口把插件挂接到系统中。   这样的方式带来什么样的优点呢?首先是系统的扩展性大大的增强了,如果我们在系统发布后需要对系统进行扩充,不必重新编译,只需要修改插件就可以了。其次有利与团队开发,各个功能模块由于是以插件的形式表现在系统中,系统的每日构造就很简单了,不会因为某个模块的错误而导致整个系统的BUILD失败。失败的仅仅是一个插件而已。   PhotoShop和Winamp的插件系统是比较简单的,他们首先实现了一个基本的系统,然后在这个系统的基础上挂接其他扩展的功能插件。而SharpDevelop的插件系统更加强大,它的整个系统的基础就仅仅是一个插件管理系统,而你看到的所有的界面、功能统统都是以插件的形式挂入的。在这样的一个插件系统下,我们可以不修改基本系统,仅仅使用插件就构造出各种各样不同的系统。   现在让我们来看看它的插件系统。进入到SharpDevelop的安装目录中,。在Addins目录下有两个后缀是addin的文件,(配置)文件,里面定义的各个功能模块存在于Bin/,另外还有很多其他的插件定义在Addins目录下的addin文件中。   分析SharpDevelop的代码,首先要弄清楚几个基本的概念,这些概念和我以前的预想有一些区别,我深入了代码之后才发现我的困惑所在。1、AddInTree  插件树   SharpDevelop中的插件被组织成一棵插件树结构,树的结构是通过Extension(扩展点)中定义的Path(路径)来定义的,类似一个文件系统的目录结构。系统中的每一个插件都在配置文件中指定了Extension,通过Extension中指定的Path挂到这棵插件树上。在系统中可以通过AddTreeSingleton对象来访问各个插件,以实现插件之间的互动。2、 AddIn插件   在SharpDevelop的概念中,插件是包含多个功能模块的集合(而不是我过去认为的一个功能模块)。在文件的表现形式上是一个addin配置文件,在系统中对应AddIn类。3、Extension扩展点   SharpDevelop中的每一个插件都会被挂到AddInTree(插件树)中,而具体挂接到这个插件树的哪个位置,则是由插件的Extension对象中的Path 指定的。在addin配置文件中,对应于<Extension>。例如下面这个功能模块的配置<Extension path = "/SharpDevelop/Workbench/Ambiences">         <Class id    = ".NET" class =