SharpDevelop源码分析笔记(一)
2005-08-02 16:54
465 查看
[b]SharpDevelop源码分析笔记(一)
[/b]
[-Fbt-2005-8-2]
引言:学习.NET已经有一段时间了,而在工作中也常常会碰到一些比较头痛的问题.最常见的就是因为客户要增加某个功能而不得不对程序进行大幅修改.但是由于设计上的缺陷,往往一个地方改动后,会引起其它地方的异常.例如修改全局变量,或窗体间的耦合度太高.这样往往要付出很高的代价才能完成修改工作.所以好的设计会减少以后工作的的很多麻烦.既然有了前车之鉴,这个使用Eclipse类似的插件技术来实现整个系统的开源IDE SharpDevelop自然就吸引了我.好了,言归正传.
初次使用感觉
启动程序给我的第一感觉就是:比微软的VS2003 要快.界面也很清爽.功能和vs2003差不多,比较实用的就是VB.NET 和C# 的相互转换功能.好了,赶紧下载源码来看看. http://www.icsharpcode.com/ 为了调试方便先将下载的源码转换为VS2003工程.
[b]1. 疑惑[/b]
可能由于SharpDevelop使用插件树来构建整个系统,在看代码时,感觉很不习惯,往往在看到某个地方时会突然失去函数方法调用的线索,例如看某个函数的实现的时候会跳到一个接口里面去,那是因为这部分功能在运行期才会给出一个实现了这个接口的对象来进行具体的执行。
找到主程序的起点在\src\Main\StartUp\SharpDevelopMain.cs
//系统出现异常的时候,SharpDevelop会拦截下来弹出它自己的异常提示报告对话框。
Application.ThreadException += new ThreadExceptionEventHandler(ShowErrorBox);
很实用的异常捕获方法,可以用到自己的程序中
//ShowErrorBox 方法:
static void ShowErrorBox(object sender, ThreadExceptionEventArgs eargs)
//ExceptionBox 定义:
\src\Main\StartUp\Dialogs\ExceptionBox.cs
[b]2. 核心初始化
[/b]
string [] addInDirs = AddInSettingsHandler.GetAddInDirectories(out ignoreDefaultPath);
AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath);
//此段代码的意思是查找插件树配置文件的路径,它首先去调用AddInSettingsHandler.GetAddInDirectories()方法,然后查找App.Config中的AddInDirectories这一项,如果在配置文件中不存在这一项的话就返回空值。当调用AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath)方法时如果addInDirs为空的话那么插件树配置文件的默认路径为 ../Addin/。
try
catch (XmlException e)
catch (Exception e)
finally //退出启动界面
//在消息循环结束时, 卸载所有的服务
try
finally
SharpDevelop的启动过程总算搞清楚了,感觉有所启发,而最难于理解的就是, SharpDevelop没有在核心中嵌入任何GUI层,而在应用程序实际用到时,才会实现GUI层.这样好处是提供了良好的扩展性,但也为读懂程序和调试带来一定的困难.(至少我现在是这样,牛人除外).好了,暂时分析到这,下次接着分析各个细节.写了这久现在背后已经湿了大半,还好公司有空调,明天休息咋办呢?
[/b]
[-Fbt-2005-8-2]
引言:学习.NET已经有一段时间了,而在工作中也常常会碰到一些比较头痛的问题.最常见的就是因为客户要增加某个功能而不得不对程序进行大幅修改.但是由于设计上的缺陷,往往一个地方改动后,会引起其它地方的异常.例如修改全局变量,或窗体间的耦合度太高.这样往往要付出很高的代价才能完成修改工作.所以好的设计会减少以后工作的的很多麻烦.既然有了前车之鉴,这个使用Eclipse类似的插件技术来实现整个系统的开源IDE SharpDevelop自然就吸引了我.好了,言归正传.
初次使用感觉
启动程序给我的第一感觉就是:比微软的VS2003 要快.界面也很清爽.功能和vs2003差不多,比较实用的就是VB.NET 和C# 的相互转换功能.好了,赶紧下载源码来看看. http://www.icsharpcode.com/ 为了调试方便先将下载的源码转换为VS2003工程.
[b]1. 疑惑[/b]
可能由于SharpDevelop使用插件树来构建整个系统,在看代码时,感觉很不习惯,往往在看到某个地方时会突然失去函数方法调用的线索,例如看某个函数的实现的时候会跳到一个接口里面去,那是因为这部分功能在运行期才会给出一个实现了这个接口的对象来进行具体的执行。
找到主程序的起点在\src\Main\StartUp\SharpDevelopMain.cs
//系统出现异常的时候,SharpDevelop会拦截下来弹出它自己的异常提示报告对话框。
Application.ThreadException += new ThreadExceptionEventHandler(ShowErrorBox);
很实用的异常捕获方法,可以用到自己的程序中
//ShowErrorBox 方法:
static void ShowErrorBox(object sender, ThreadExceptionEventArgs eargs)
//ExceptionBox 定义:
\src\Main\StartUp\Dialogs\ExceptionBox.cs
[b]2. 核心初始化
[/b]
string [] addInDirs = AddInSettingsHandler.GetAddInDirectories(out ignoreDefaultPath);
AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath);
//此段代码的意思是查找插件树配置文件的路径,它首先去调用AddInSettingsHandler.GetAddInDirectories()方法,然后查找App.Config中的AddInDirectories这一项,如果在配置文件中不存在这一项的话就返回空值。当调用AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath)方法时如果addInDirs为空的话那么插件树配置文件的默认路径为 ../Addin/。
try
catch (XmlException e)
catch (Exception e)
finally //退出启动界面
//在消息循环结束时, 卸载所有的服务
try
finally
SharpDevelop的启动过程总算搞清楚了,感觉有所启发,而最难于理解的就是, SharpDevelop没有在核心中嵌入任何GUI层,而在应用程序实际用到时,才会实现GUI层.这样好处是提供了良好的扩展性,但也为读懂程序和调试带来一定的困难.(至少我现在是这样,牛人除外).好了,暂时分析到这,下次接着分析各个细节.写了这久现在背后已经湿了大半,还好公司有空调,明天休息咋办呢?
相关文章推荐
- SharpDevelop源码分析笔记(一)
- Android M 启动源码分析笔记之 - Init 进程
- Hadoop源码分析笔记(二):Hadoop序列化与压缩
- Android M 启动源码分析笔记之 - Zygote 孵化
- TensorFlow学习笔记之五——源码分析之最近算法
- Hadoop源码分析笔记(四):Hadoop文件系统简介
- Redis源码分析:serverCron - redis源码笔记
- JFinal个人学习笔记之源码分析3
- [置顶] TensorFlow学习笔记之五——源码分析之最近算法
- Clamav杀毒软件源码分析笔记[八]
- jQuery 源码分析笔记(3) Deferred机制
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
- SharpDevelop源码分析 (三、插件系统)
- jQuery 源码分析笔记(4) Ready函数
- librtmp 源码分析笔记 WriteN
- librtmp 源码分析笔记 RTMP_ReadPacket
- jQuery 源码分析笔记(7)
- Netty源码分析笔记之运行Netty 源码自带的例子example时,编译不通过
- bootstrap源码jQuery插件之button.js源码分析笔记
- Ui学习笔记---EasyUI的EasyLoader组件源码分析