前 言 

最近在网上有很多关于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,修改为如下内容: 

1using System; 
  2using System.Drawing; 
  3using System.Windows.Forms; 
  4 
  5using ICSharpCode.SharpDevelop.Gui; 
  6 
  7namespace 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         = "" 
        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菜单项。 

SharpDevelop开发教程(一)_代码分析


如果需要指定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的使用,我将会在后面的内容中讲述。