前 言
最近在網上有很多關於SharpDevelop代碼分析的文章,但對SharpDevelop插件和核心服務開發的文章確很少。這份文檔我想應該會對大家有幫助。爲了不浪費大家的時間和網絡流量,我不打算給大家講SharpDevelop的基本概念和內部的代碼分析。各位可以參閱清華大學出版的一本紅皮書《C#軟件項目開發全程剖析-全面透視SharpDevelop軟件的開發內幕》(我真的不是清華的書託J),雖然翻譯的一般、但有總比沒有的好,各位也可以參閱博客園(www.cnblogs.com)另外幾位的文章,其中古月春秋的《SharpDevelop代碼分析》系列是個人認爲寫的很不錯的,很見作者的功底。(題外話:古月春秋的文章中提到了對codon的翻譯的問題,英文中電子、中子、光子、質子分別譯爲electron、 neutron、photon、proton,此處大家會對-on後綴發出會心的微笑。Codon翻譯成“代碼子”意思應該是很到位的,清華那本書中的“密碼子”就遜色些了,但也還將就。)
這文章大家可以任意閱讀轉載,但請保持文檔的完整轉載。由於在工作的中午休息期間所寫,十分匆忙,難免有勿,請各位斧正。
爲了方便起見,我在文章中都把SharpDevelop簡稱爲SD。
第一章 Pad
Pad(面板)就是SD中的停靠窗口。有這些特點:Pad不能關閉,但可以隱藏或顯示。每種類型的Pad只能打開一個,不能在運行時添加,標題唯一。可以顯示圖標,由SD中的佈局管理器負責管理。通常不顯示文件內容,而是輔助用戶完成任務。
下面進入我們的實戰流程,先新建一個類庫型的項目,命名爲CSPadDemoPlug,把Class1.cs改名爲Main.cs,修改爲如下內容:
1
using System;
2
using System.Drawing;
3
using System.Windows.Forms;
4
5
using ICSharpCode.SharpDevelop.Gui;
6
7
namespace SDPadDemoPlug
8
{
9
public
class SDPad : AbstractPadContent
10
{
11
SDPadControl control=new SDPadControl();
12
public SDPad(): base("TestPanel")
13
{
14
}
15
16
public
override Control Control
17
{
18
get
19
{
20
return
this.control;
21
}
22
}
23
24
}
25
}
26
記得要在項目中加入SD中的ICSharpCode.Core.dll和SharpDevelop.Base.dll引用。這兩個文件在SD下的Bin目錄下。寫SD的插件需要包含。
在項目中添加新建項à用戶控件。改名爲CSPadControl。各位可以在CSPadControl上添加一些相關的內容。
在工程中添加一個DemoPlug.addin文件,這是插件配置文件,很重要,內容如下:
<AddIn name = "SharpDevelop Plug Demo"
author = "SongYuanWu"
copyright = "GPL"
url = "http://www.cnblogs.com/CBuilder"
description = "SharpDevelop "
version = "1.0.0">
<Runtime>
<Import assembly="SDPadDemo.dll"/>
</Runtime>
<Extension path = "/SharpDevelop/Workbench/Views">
<Class id = "SDPadDemo"
class = "SDPadDemoPlug.SDPad"/>
</Extension>
</AddIn>
OK!把編譯後的SDPadDemo.dll和DemoPlug.addin文件拷貝到SD的/AddIns/目錄下,運行SD就可以看到我們創建的Pad了(如下圖),同時在SD的菜單【查看】-【工具】下也出現了TestPanel菜單項。
如果需要指定pad的圖標時,可以改更改base("TestPanel")爲 base("TestPanel", "IconID")。
InconID爲圖標的資源號,作爲演示你可以用Class的圖標“Icons.16x16.Class”來替代。
要點分析:
製作Pad的時候要從AbstractPadContent繼承。所以要using ICSharpCode.SharpDevelop.Gui;
.addin文件中不要用中文,否則會出現錯誤,那如果需要用到中文怎麼辦呢?可以使用SD的字符串分析服務,把字符串改爲如下形式${res:StringID},StringID是SD中的資源ID,SD的ResourceService的使用,我將會在後面的內容中講述。
源文檔 <http://cbuilder.cnblogs.com/archive/2005/08/06/209046.aspx>