SharpDevelop 简介

SharpDevelop带你进入免费的C# 编程环境   微软公司特别为.NET框架设计了C#语言,C#融合了其他语言的优点而成为一个强有力的编程语言。作为一个Java的开发者,我对C#的推出充满好奇,不幸的是,对于微软的开发环境Visual Studio .NET,列出的价格超过了$1,000,这就使问题很明显了:我想使用这种语言,但我负担不起它的价格。可喜的是,我找到了一个免费的.NET开发环境,叫做SharpDevelop。 获得软 阅读详情

最近开始学习.Net,遇到了一个比较不错的开源的IDE SharpDevelop。这个开发工具是使用C#开发的,比较吸引我的一点就是它是采用了和Eclipse类似的插件技术来实现整个系统的。而这个插件系统是我最感兴趣的地方,因此开始了一段代码的研究。在本篇之后,我会陆续把我研究的心得写下来。由于是在网吧上网,有诸多不便,因此可能会拖比较长的时间。



一、基本概念

首先,我们先来对 SharpDevelop 有一个比较感性的认识。你可以从这里下载到它的可执行程序和代码包 http://www.icsharpcode.com/ ,安装的废话就不说了,先运行一下看看。感觉跟VS很像吧?不过目前的版本是1.0.0.1550,还有很多地方需要完善。关于代码和系统结构,SharpDevelop的三个作者写了一本书,各位看官可以参考一下,不过我看过之后还是有很多地方不太理解。

然后,让我来解释一下什么叫插件以及为什么要使用插件系统。我们以往的系统,开发人员编译发布之后,系统就不允许进行更改和扩充了,如果要进行某个功能的扩充,则必须要修改代码重新编译发布。这就给我们带来了比较大的不方便。解决的方法有很多,例如提供配置等等方法。在解决方案之中,插件是一个比较好的解决方法。大家一定知道PhotoShop、WinAmp吧,他们都有“插件”的概念,允许其他开发人员根据系统预定的接口编写扩展功能(例如PhotoShop中各种各样的滤镜)。所谓的插件就是系统的扩展功能模块,这个模块是以一个独立文件的形式出现的,与系统是相对独立。在系统设计期间并不知道插件的具体功能,仅仅是在系统中为插件留下预定的接口,系统启动的时候根据插件的配置寻找插件,根据预定的接口把插件挂接到系统中。

这样的方式带来什么样的优点呢?首先是系统的扩展性大大的增强了,如果我们在系统发布后需要对系统进行扩充,不必重新编译,只需要修改插件就可以了。其次有利与团队开发,各个功能模块由于是以插件的形式表现在系统中,系统的每日构造就很简单了,不会因为某个模块的错误而导致整个系统的BUILD失败。失败的仅仅是一个插件而已。

PhotoShop和Winamp的插件系统是比较简单的,他们首先实现了一个基本的系统,然后在这个系统的基础上挂接其他扩展的功能插件。而SharpDevelop的插件系统更加强大,它的整个系统的基础就仅仅是一个插件管理系统,而你看到的所有的界面、功能统统都是以插件的形式挂入的。在这样的一个插件系统下,我们可以不修改基本系统,仅仅使用插件就构造出各种各样不同的系统。

现在让我们来看看它的插件系统。进入到SharpDevelop的安装目录中,在Bin目录下的SharpDevelop.exe 和 SharpDevelop.Core.dll是这个系统的基本的插件系统。在Addins目录下有两个后缀是addin的文件,其中一个 SharpDevelopCore.addin 就是它的核心插件的定义(配置)文件,里面定义的各个功能模块存在于Bin/Sharpdevelop.Base.dll 文件中,另外还有很多其他的插件定义在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 = "ICSharpCode.SharpDevelop.Services.NetAmbience"/>
</Extension>
指定了扩展点路径为 /SharpDevelop/Workbench/Ambiences ,也就是在插件树中的位置。

4、Codon
这个是一个比较不好理解的东西,在 SharpDevelop 的三个作者写的书的中译版中被翻译为代码子,真是个糟糕的翻译,可以跟Handle(句柄)有一拼了。词典中还有一个翻译叫“基码”,我觉得这个也不算好,不过还稍微有那么一点意思。
根据我对代码的理解,Codon 描述(包装)一个功能模块,一个功能模块对应一个实现了具体功能的 Command 类。为了方便访问各个插件中的功能模块, Codon 给各种功能定义了基本的属性,分别是 ID (功能模块的标识),Name (功能模块的类型。别误会,这个Name 是addin文件定义中Codon的XML结点的名称,ID才是真正的名称),其中Name可能是Class(类)、MenuItem(菜单项)、Pad(面板)等等。根据具体的功能模块,可以继承Codon定义其他的一些属性,SharpDevelop中就定义了 ClassCodon、MenuCodon、PadCodon等等。
在addin定义文件中,Codon对应于 <Extension> 标签下的内容。 例如下面这个定义
<Extension path = "/SharpDevelop/Workbench/Ambiences">
<Class id = ".NET" class = "ICSharpCode.SharpDevelop.Services.NetAmbience"/>
</Extension>

<Extension ...> 内部定义了一个Codon,<Class ...> 表示该Codon是一个 Class(类),接着定义了该Codon的 ID和具体实现该Codon的类名ICSharpCode.SharpDevelop.Services.NetAmbience。运行期间将通过反射来找到对应的类并创建出来,这一点也是我们无法在以前的语言中实现的。

再例如这一个定义
<Extension path = "/SharpDevelop/Views/ProjectBrowser/ContextMenu/CombineBrowserNode">
<MenuItem id = "Compile"
label = "${res:XML.MainMenu.RunMenu.Compile}"
class = "ICSharpCode.SharpDevelop.Commands.Compile"/>
<MenuItem id = "CompileAll"
label = "${res:XML.MainMenu.RunMenu.CompileAll}"
class = "ICSharpCode.SharpDevelop.Commands.CompileAll"/>
<MenuItem id = "CombineBuildGroupSeparator" label = "-" />
....
</Extension>
这个扩展点中定义了三个菜单项,以及各个菜单项的名字、标签和实现的类名。这里的Codon就对应于系统中的MenuCodon对象。

5、Command 命令
正如前文所述,Codon描述了一个功能模块,而每个功能模块都是一个 ICommand 的实现。最基本的 Command 是 AbstractCommand,根据Codon的不同对应了不同的 Command。例如 MenuCodon 对应 MenuCommand 等等。

6、Service 服务
插件系统中,有一些功能是整个系统都要使用的,例如文件访问、资源、消息等等。这些功能都作为插件系统的一个基本功能为整个系统提供服务,我们就叫“服务”好了。为了便于访问,这些服务都统一通过 ServiceManager 来管理。其实服务也是一种类型的插件,它们的扩展点路径在目录树中的 /Services 中。


理解了这几个基本的概念之后,就可以看看 SharpDevelop 的代码了。从 src/main/startup.cs 看起吧,之后是addin.cs、addinTree.cs 等等。

写了两个小时了,休息一下。且听下回分解吧。

OpenCV实战:从边缘检测到透视校正,打造智能文档扫描仪(Python代码详解) 本文详细介绍了如何使用OpenCV和Python从零开始构建一个智能文档扫描仪。通过边缘检测、透视校正和文字增强等核心技术,将倾斜、模糊的文档照片转换为清晰、方正的高质量扫描图像。文章提供了完整的代码实现和参数调优经验,帮助开发者打造稳定、高效的文档处理工具。 阅读详情

相关推荐

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4247

SharpDevelop的安装与配置

保姆级SharpDevelop安装配置教程。

boliang319的专栏 4870

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

【C#】SharpDevelop使用教程,C#写windows下第一个窗口程序,简单粗暴,初学者进,全图文,一看就明白

VS不说,功能强大,但是挺大。 下面,来说说轻量级IDE来写一个简单的windows程序。 首先,下载,不说了,最新版本5.x需要.net4.x支持,需要先安装.net framework 4.x框架。(版本控制此文不做其他说明,自己多做做功课) 下载好了安装。都不说。装好了双击打开。进入。。。 一进来是这样,然后第一步切换语言, TOOLS-->option 正式开始

capricornce的博客 2万+

【人脸识别/轻量级模型】MobileFaceNet:适用于人脸识别的轻量级网络模型(文末附pytorch代码)

MobileFaceNet:用于人脸识别的轻量级网络模型

Roaddd的博客 6990

SXU—软件测试方法和技术-朱少民-第四部分 软件测试流程和规范-附考点

软件测试方法和技术-朱少民-第四章 软件测试流程和规范—这本书最后一部分的考点整理,考点分析

weixin_63597914的博客 1752

SharpDevelop 开发WPF教程

最近写项目需要用到windows GUI开发,想到的第一个框架是QT。可是对方需要软件在XP运行,QT5.X写的桌面程序无法直接在XP主机运行,还需要一些额外的包装和操作。加上看QT教程,感觉从配置和教程都略微复杂,就放弃了,转用别人介绍的WPF。 一.WPF框架介绍: WFP的全称是Windows Presentation Foundation,你可以把它翻译成“微软呈现基础”。是微软推出的基

xiangxianghehe的博客 7887

基于STM32L4XX、HAL库的ESP32-C3-WROOM-02-N4 WIFI模块驱动程序设计

支持802.11 b/g/n Wi-Fi (2.4GHz)RISC-V 32位单核处理器,主频高达160MHz。封装尺寸:18mm × 20mm × 3mm。工作温度范围:-40°C ~ 85°C。// 设置WiFi模式为STA。支持Bluetooth 5 (LE)// 发送AT指令测试通信。// 检查响应是否包含OK。内置4MB SPI Flash。// 连接TCP服务器。// 发送HTTP请求。// 初始化UART。// 建立TCP连接。低功耗设计,适合IoT应用。

zhusl6688的博客 385

【亲测免费】 探索SharpDevelop:一个强大的开源IDE平台

探索SharpDevelop:一个强大的开源IDE平台 是一个专为.NET Framework和.NET Core设计的开放源代码集成开发环境(IDE),它由IC#Code团队维护,提供了一整套用于创建、测试和调试C#、VB.NET以及其他.NET语言的应用程序工具。 项目简介 SharpDevelop的核心目标是为开发者提供一个自由、灵活且易于扩展的工作台,与商业IDE相比,它不仅具备类似的功能...

gitblog_00019的博客 1457

大模型——Dify:知识库与外部知识库

摘要 Dify的知识库功能为开发者提供了动态知识管理解决方案,超越了大模型静态预训练数据的限制。知识库支持多种文档格式(如txt、pdf、docx等),通过文档分段、索引设置和检索优化机制提升LLM的响应准确性。系统提供高质量和经济两种索引模式,前者采用向量化检索技术,后者使用关键词匹配以降低成本。知识库支持元数据管理,包括自动生成的内置元数据和用户自定义元数据,便于内容分类和检索。对于高级需求,Dify还支持连接外部知识库,通过API实现跨平台数据共享和检索优化,满足企业级知识管理需求。

732

使用Open3D进行RGB-D图像点云处理

在本文中,我们将使用Open3D来处理RGB-D图像,提取点云并进行一些基本的操作。总结起来,本文介绍了如何使用Open3D库处理RGB-D图像并提取点云。我们展示了如何读取RGB-D图像,创建RGB-D图像和点云,并显示点云。除了显示点云,Open3D还提供了许多其他功能,如点云滤波、点云配准、表面重建等。在创建RGB-D图像时,我们需要指定深度图像的缩放因子和截断值,以及是否将RGB图像转换为强度图像。希望本文能够帮助您入门Open3D,并在处理RGB-D图像和点云数据时提供一些指导。

QfcaLinux的博客 445

SharpDevelop安装与配置

SharpDevelop是一个用于C#开发的IDE,相比于VisualStudio的臃肿,SharpDevelop的小巧能让人专注于C#开发。 SharpDevelop官方下载地址:http://www.icsharpcode.net/OpenSource/SD/Download/ 注意:最新的4.4和5.1不支持XP,如果想在XP上使用,建议下载3.2版 安装SharpDevelop之前必

gsls200808的专栏 9930

prplOS适配USB LAN网卡

本文介绍了将USB LAN网卡(如rndis0)适配到prplOS的LAN管理流程。

四儿家的小祖宗的博客 322

SharpDevelop

不得不佩服老外的创造力。很早以前就久闻SharpDevelop的大名,终于抽空一睹庐山真面目!这不简直就是IDE中的Firefox吗?!全插件式开源IDE!牛B。当然,SharpDevelop不如visualstudio,那是Microsoft的重量级产品之一了。不过还好了,没有VS那么大,有时候携带安装还是挺方便的。

博客搬往 http://begtostudy.cnblogs.com 4812

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SharpDevelop的AddInTree View 插件

自从SharpDevelop 源码分析的系列文章发出来之后,很多朋友给了不错的评价,在这里先感谢各位朋友的鼓励。另外,评论中有位朋友想看看我在文章中提到的AddInTreeView插件,其实这个是个很简单的小东西,因此单独发在这里了。(好像没有找到那里能上传文件,因此直接贴代码了)AddinTreeViewCommand.cs/**//* * Created by SharpDevelop

蜗牛档案室 2479

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

sharpdevelop简介

sharpdevelop简介

云原生devsecops 1719

sharpdevelop官方下载地址

sharpdevelop官方下载地址http://www.icsharpcode.net/OpenSource/SD/Download/

代码打字员 2875

sharpdevelop mysql_使用sharpdevelop连接MySQL

MySQL版本为:5.0.88;sharpdevelop版本3.1综合网上查找的信息,通过MySQL.DATA这个类来连接数据库,其特性和ODBC一样,其中的方法和属性也基本一致。首先去MySQL网页上下载5.0.9版本的Connector。安装好以后可以在/windows/assembly文件夹找到MySQL.DATA这个组件。这时候已经将这个组件注册到全局程序集中了,我们就可以在sharpde...

weixin_39533896的博客 397

SharpDevelop代码分析

SharpDevelop代码分析作者:tupunco 日期:2004-12-28字体大小: 小 中 大SharpDevelop代码分析 (一、序+基本概念)序     最近开始学习.Net,遇到了一个比较不错的开源的IDE SharpDevelop。这个开发工具是使用C#开发的,比较吸引我的一点就是它是采用了和 Eclipse类似的插件技术来实现整个系统的。而这个插

苗伟的专栏 2970

C# IDE SharpDevelop的一些缺陷

趁早放弃SharpDevelop,别在它上面浪费时间!1.不支持64bit程序的调试。2.界面容易变花。3.不支持C# 6.0的新特性。比如不能用static声明静态类的引用。

磁悬浮青蛙呱呱呱 1万+

[Dev-Boo]SharpDevelop修改快捷键

使用SharpDevelop开发boo很好用,项目组织,代码提示什么的.SharpDevelop是一款很好的open IDE,如果写一些简单的dotnet产品使用#Develop会很容易上手.#Develop对boo已经支持代码提示(快捷键:Ctrl+Space),可惜跟中文系统的输入法切换冲突了.我也为这个烦恼了一阵,虽说可以用,但不能主动调出提示也很不方便,我曾经尝试修改#Develop的源码

ben的专栏 2662

sharpdevelop mysql_SharpDevelop + MySql | 学步园

Vista + VS 2005 + Oracle 10g开发环境,内存使用1.5G,系统速度终于让人受不了了。还没有用VS 2005调试,因为NUnit + log4net可以方便的测试和debug。code generator做一个MySql生成脚本,建立MySql数据库,把开发环境换成SharpDevelop + MySql,内存使用700M左右,总算好多了。MySql内存4M不到,Sharp...

weixin_31832681的博客 211

SharpDevelop源代码分析笔记

 1.如何创建插件树 CoreStartup的RunInitialization调用AddInTree.Load方法,加载Addins,并执行/Workspace/Autostart节点下的Addin的Command 加载Addins时,XmlReader解析.addin文件,调用了AddIn.Load,AddIn.SetupAddIn,根据xml元素是Runtime,Include,Path,M

皮业勇的技术专栏 3437

关于SharpDevelop

前一段时间研究了一下SharpDevelop,不知道这里有没有同道中人。 转载于:https://www.cnblogs.com/levi/archive/2004/09/29/47753.html

weixin_30468137的博客 143

SharpDevelop with Silverlight

Error creating project :The imported project “C:\Program Files (x86)\MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Silverlight.CSharp.targets” was not found

大师的资源 4588
上一篇: C#全局变量的使用
下一篇: C#,winform 用户信息保存注册表及.ini文件
边缘计算机
博客等级 码龄17年 185粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值