从前的工作中用需要在SharpDevelop的体系结构上,开发出一个工具。所以看了一下SharpDevelop的源码,然后就被SharpDevelop中的插件体系所吸引。所以想写点读这个源代码的心得,开源工程是学习编程的好材料,但是就是相关资料不好找,SharpDevelop的开发小组倒是出过一本书来阐述它的体系结构,但是基于比较老的版本,很多内容以经和现在的版本不同了,希望我写的Blog大家可以交流一下学习SharpDevelop源码的心得,互相促进,刚刚开博,而SharpDevelop的结构也很复杂,分析起来不容易,写的不好,请多见谅。
代码下载 Downloads for SharpDevelop 3.2 Source Code
SharpDevelop最重要的特点就是其灵活的插件体系,扩展性非常好,如果Eclipse一样,可以方便的进行二次开发。XML文件在其中如同粘合剂一样,将每个模块联系起来,插件之间可以完全做到高内聚,低耦合。
由于个人能力所限,我不太可能把SharpDevelop完全剖析明白,主要想写的几个部分就是插件模型,主程序和几个总要服务等,最头疼的估计个人搞不定的是代码解析部分。如果有时间的话我也会尽可能的去探究一下。
首先看一下SharpDevelop的解决方案的结构:
1. Addin:这个文件夹下是自带插件,
Misc文件夹下是一些工具插件,如正则表达式,单元测试等工具。
Backend文件夹下是编程语言对应的工程和文件解析及其它处理相关的工程,每一种语言有一个相应的工程,
Display Bindings下面是各种设计器的工程,如Winform设计器。
2.Library: 这个文件夹下是公用模块,
NRefectory用来解析C#和VB.NET代码文件(没有深入研究过,可能说的不准确),
ICSharpCode.TextEditor是一个代码文本编辑控件,
WinformUI是一个开源工程,用来实现VS中子窗口拖放订制布局的功能。
ICSharpCode.Build.Tasks: 处理编译工程的工作(没有深入研究过,可能说的不准确)
Aga.Controls: 一些帮助类和控件
3. Main:这个文件夹下是SharpDevelop的核心部分
ICSharpCode.Core.Presentation:可能是这个版本新添加的,没研究过
ICSharpCode.SharpDevelop.BuildWorker:同上
ICSharpCode.Core:插件体系核心,基础服务及常用功能辅助类
ICSharpCode.Core.WinForms: 自定义UI控件
ICSharpCode.SharpDevelop:主界面及功能模块
ICSharpCode.SharpDevelop.Dom:基本代码文件解析模块
ICSharpCode.SharpDevelop.Sda:SharpDevelop运行时的AppDomain
ICSharpCode.SharpDevelop.Widgets: UI部件
StartUp:程序入口
每个工程下面都有一个Configuration文件夹,里面为程序集版本信息文件
资源文件放在Resources文件夹。
重要路径:
%sharpdevelop%\addin:所有插件都放在这文件夹下,程序启动后会有这个文件夹中查找*.addin文件,以此来加载插件
%user_app_data%ICSharpCode:存放全局配置文件