




免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SharpDevelopAddin(插件树)使用方法-让SharpDevelop的插件树运行在自己(2011-01-17 12:09:40) 转载标签: 杂谈分类: 信息技术 SharpDevelop Addin(插件树) 使用方法在经历了N多次的迷茫和郁闷后,今天终于明白了Addin这个东东怎么使用。下面为大家总结一下我研究的过程,希望大家看过我的文档后,研究Addin这个的东西不再这么痛苦拉。而且可以更快的了解插件树是怎么运行的.好了,废话不多说了,下面言归正传。Addin作为SharpDevelop的核心组件,它提供了一种插件树的机制来调用插件组成整个应用程序。我将把Addin的核心代码从SharpDevelop中分离出来,然后作为单独的工程。全部的过程大概分这么两个部分:一、 从SharpDevelop中分离出Addin的代码。二、 新建一个工程作为调用插件树的主程序。三、 新建一个插件以供程序调用。第一部分 分离出插件树的核心代码那么首先来讲讲怎么从SharpDevelop中导出Core工程到20031. 我们要导出代码首先就必须得到它的源码,源码可以在SharpDevelop的官方网站/OpenSource/SD/Download/ 中下载。2. 在下载完程序之后你可以在srcMainCore 目录下找到Core.prjx这个文件(此文件是SharpDevelop的工程文件),使用SharpDevelop打开此文件,这时候整个Core项目就加载到SharpDevelop(Core为整个SharpDevelop的核心工程,其中包括了插件树、服务和属性)。由于SharpDevelop目前调试还没有.net2003方便,所以我们把程序导出为.Net2003的格式可以通过SharpDevelop的 “文件输出工程选择你要输出的文件夹”来导出整个项目。3. 在输出成功后用.Net2003加载刚才输出的解决方案然后编译,这样就可以在输出目录下的bindebug目录下找到ICSharpCode.Core.dll这个文件了(此文件为整个插件树的核心组件,在后面的插件树应用中全部都是引用的该组件)。4. 拷贝CoreKey.key这个文件到当前项目的目录下。在经过上述三个步骤之后,整个Addin的代码就从SharpDevelop代码中分离出来了,是不是很简单啊 _。第二部分 建造一个新工程来利用插件树的机制加载插件刚才第一部分我们讲解了如何分离出插件树的核心代码,此部分我将讲解怎么在应用程序中利用插件树的机制来加载插件。1 首先新建一个Windows应用程序AddinMain。2 在刚才新建的项目中删除Form1然后添加一个类AddinsMain。3 引用ICSharpCode.Core.dll组件(要得到此组件请看第一部分)。4 当上述三个步骤完成后就开始编码工作了,把下面的代码Copy到AddinsMain类中。using System;using System.IO;using System.Diagnostics;using System.Reflection;using System.Drawing;using System.Collections;using System.Windows.Forms;using System.Resources;using System.Xml;using System.Threading;using System.Runtime.Remoting;using System.Security.Policy;/引用Core的命名空间using ICSharpCode.Core.Properties;using ICSharpCode.Core.AddIns.Codons;using ICSharpCode.Core.AddIns;using ICSharpCode.Core.Services;namespace AddinMain/ AddinsMain 的摘要说明。/public class AddinsMainpublic AddinsMain()/ TODO: 在此处添加构造函数逻辑/ 整个程序的入口点/STAThread()public static void Main(string args)/查找ADDIN的主目录 默认情况下目录为当前目录的./Addin/bool ignoreDefaultPath = false;string addInDirs = AddInSettingsHandler.GetAddInDirectories(out ignoreDefaultPath);AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath);ArrayList commands = null;try/启动默认的系统服务ServiceManager.Services.AddService(new Resource();/启动后台服务ServiceManager.Services.InitializeServicesSubsystem(/Workspace/Services);/在程序开始运行时首先加载的插件commands = AddInTreeSingleton.AddInTree.GetTreeNode(/Workspace/Autostart).BuildChildItems(null);for (int i = 0; i commands.Count; +i)(ICommand)commandsi).Run();catch (XmlException e)MessageBox.Show(不能加载 XML : + Environment.NewLine + e.Message);return;catch (Exception e)MessageBox.Show(加载出错 : + Environment.NewLine + e.ToString();return;下面为大家解释一下这段代码的意思bool ignoreDefaultPath = false;string addInDirs = AddInSettingsHandler.GetAddInDirectories(out ignoreDefaultPath);AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath);此段代码的意思是查找插件树配置文件的路径,它首先去调用AddInSettingsHandler.GetAddInDirectories()方法(AddInSettingsHandler类在后面介绍)查找App.Config中的AddInDirectories这一项,如果在配置文件中不存在这一项的话就返回空值。当调用AddInTreeSingleton.SetAddInDirectories(addInDirs, ignoreDefaultPath)方法时如果addInDirs为空的话那么插件树配置文件的默认路径为 ./Addin/。ServiceManager.Services.AddService(new Resource();在找到插件树配置文件路径后首先要启动一个默认的资源服务Resource(该服务为系统的默认服务,必须启动,否则程序将无法运行)。ServiceManager.Services.InitializeServicesSubsystem(/Workspace/Services);在启动完程序的默认服务后就开始启动自定义服务了。所有默认服务都是在配置文件的/Workspace/Services扩展点中。commands = AddInTreeSingleton.AddInTree.GetTreeNode(/Workspace/Autostart).BuildChildItems(null);for (int i = 0; i commands.Count; +i)(ICommand)commandsi).Run();这段代码就是程序启动时加载前台插件了,/Workspace/Autostart是系统自动运行命令的扩展点路径,定义在这个路径下的插件会在系统启动的时候自动运行。5经过上述的步骤后插件就可以被加载了,不过这个时候程序还不能编译,应为我们的Resource类和AddInSettingsHandler类都没有添加。下面我们首先添加AddInSettingsHandler类,该类为插件树控制类。代码如下:using System;using System.Configuration;using System.Collections;using System.Xml;namespace AddinMain/ AddInSettingsHandler 的摘要说明。/public class AddInSettingsHandler : System.Configuration.IConfigurationSectionHandlerpublic AddInSettingsHandler()public object Create(object parent, object configContext, System.Xml.XmlNode section)ArrayList addInDirectories = new ArrayList();XmlNode attr = section.Attributes.GetNamedItem(ignoreDefaultPath);if (attr != null)tryaddInDirectories.Add(Convert.ToBoolean(attr.Value);catch (InvalidCastException)addInDirectories.Add(false);elseaddInDirectories.Add(false);XmlNodeList addInDirList = section.SelectNodes(AddInDirectory);foreach (XmlNode addInDir in addInDirList)XmlNode path = addInDir.Attributes.GetNamedItem(path);if (path != null)addInDirectories.Add(path.Value);return addInDirectories;public static string GetAddInDirectories(out bool ignoreDefaultPath)ArrayList addInDirs = System.Configuration.ConfigurationSettings.GetConfig(AddInDirectories) as ArrayList;if (addInDirs != null)int count = addInDirs.Count;if (count = 1)ignoreDefaultPath = false;return null;ignoreDefaultPath = (bool) addInDirs0;string directories = new stringcount-1;for (int i = 0; i class = HelloWorld.HelloCommand/在配置文件中,Runtime节指定了插件功能模块所在的库文件HelloWorld.dll的具体路径,在Extension节中指定了扩展点路径/Workspace/Autostart(该路径是指在程序运行时自动运行该插件),然后在Extension内指定了它的ID、Command类名。保存此配置文件运行程序,是不是Form1出来了啊,呵呵很简单吧。总结经过我的“废话连篇”想必各位都看烦了吧不过最后还是得罗嗦最后几句,回顾整个过程,首先
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版家居装饰一件代发及设计服务合同
- 二零二五年度财务顾问咨询及财务信息系统集成服务协议
- 二零二五年度大理石路沿石石材行业创新研发与技术转移合同
- 二零二五年度马术俱乐部场地租赁及培训服务协议
- 二零二五版商业地产转让合同范本
- 2025版货车车辆买卖与绿色驾驶培训课程合同
- 二零二五年度防腐木地板安装工程承包合同范本
- 二零二五年度废旧电子产品回收与公司买卖合作协议
- 二零二五年度房地产广告代理及推广服务合同范本
- 2025版地产开发项目佣金结算及支付合同
- T-CASME 1610-2024 淤泥土固化加固与处置技术规程
- 商用汽车金融方案
- 医药行业生产成本管控方案
- 上海市崇明区九校2024-2025学年六年级(五四制)上学期期中英语试题
- 预拌混凝土试验室作业指导书(完整版)
- 2024年10月自考00312政治学概论试题及答案含评分参考
- 数学-清华大学中学生标准学术能力诊断性测试2024-2025学年高三上学期10月试卷和答案
- 浪潮集团在线测评题
- 电梯维保服务投标方案(技术方案)
- 2024年江苏高考语文试题(含答案)
- 2024-2025学年人教版八年级上册数学 期末综合能力测评卷
评论
0/150
提交评论