制作SharpDevelop插件

2024-01-07 13:48
文章标签 制作 插件 sharpdevelop

本文主要是介绍制作SharpDevelop插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:http://blog.sina.com.cn/s/blog_7b60d05f0101uzbj.html

  


这段时间在研究SD编译器内部的东西,做一个向导插件,下面总结一下制作的过程。

向导插件会用到这些技术:
1.以插件的方式挂到SD上。
2.与SD中当前项目交互(添加文件,修改项目结构文件(处理有命名空间的XML文件)),模板文件的储存与读取(程序集内嵌资源)
3.向导的导航功能(胡哥的导航控件)。

下面就一个个技术记录下来:

1.以插件的方式把程序挂到SD上。
  SD是以插件的方式运行起来的,我本来做的时候是挂到工具栏的第一项的,怎么挂到工具栏呢?使用SD5.0版本,然后 SharpDevelop向导插件制作过程总结

,项目结构: SharpDevelop向导插件制作过程总结,这个Demo.addin文件要和程序集一起打包到SD的插件扩展文件夹上的,那么这个Demo.addin是干嘛的呢?主要是用来声明的,声明该插件在SD的插件树的什么位置,id是什么,位置方位在哪,还有一个最重要的就是和程序集的连接了,有了这个连接,声明和后台代码才能结合起来,连接点就是Class节点,这个节点指向程序集中的启动类。那么插件就能运作。
下面看一下工具栏的插件的声明:
SharpDevelop向导插件制作过程总结

<Manifest></Manifest>标签里面是配置插件附属哪个SD版本的,还有就是身份标识,然后Runtime标签是配置实用哪个程序集,然后重点在于Path,name属性设置插到插件树的什么位置,这个具体位置能通过SD中的 SharpDevelop向导插件制作过程总结(Addin Scout)插件查看,,用一下就知道了,Class属性就是指定使用哪个启动类了。

然后我们要开始写启动类:
1.引入SD的两个程序集,到SD的Bin下面找:ICSharpCode.SharpDevelop.dll和ICSharpCode.Core.dll。
2.新建一个类,然后继承 AbstractMenuCommand类。
3.在Run里面写逻辑,,例如新建窗口并打开,之后你懂得。

SharpDevelop向导插件制作过程总结

,鉴于会扩展到工具栏,下面给出工具栏的Addin文件:
SharpDevelop向导插件制作过程总结
OK~~~~第一步完成!


2.与SD中当前项目交互(添加文件,修改项目结构文件(处理有命名空间的XML文件))。

这一步就是新建窗口之后,画好内容以后,怎么去和SD交互的部分了,我下了一个和SD操作的经理类,全部贴上来:
namespace CG.Models
{
/// <summary>
/// SD经理,提供一些对SD进行操作的接口,方便其他部件对SD进行交互
/// </summary>
public class SDManager
{
/// <summary>
/// 寻找当前视图页是否存在该视图(例如StartPage)
/// </summary>
/// <param name="ContansViewType">视图的类型</param>
/// <returns>如果存在视图实例,返回True,否则返回False</returns>
public bool ContansViewContent(Type ContansViewType)
{
foreach(IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection)
{
if(content.GetType()==ContansViewType)
{
return true;
}
}
return false;
}
/// <summary>
/// 在视图栏中新建并且打开视图
/// </summary>
/// <param name="content">要显示的视图对象</param>
public void ShowViewContent(IViewContent content)
{
Type type=content.GetType();
if(!ContansViewContent(type))
{
WorkbenchSingleton.Workbench.ShowView(content);
}
else
{
content.WorkbenchWindow.SelectWindow();
}
}
/// <summary>
/// 在视图栏中移除对应类型的视图
/// </summary>
/// <param name="ViewContentType">视图的类型</param>
public void CloseViewContent(Type ViewContentType)
{
foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection)
          {
if (content.GetType()==ViewContentType)
              {
                  content.WorkbenchWindow.CloseWindow(true);
              }
          }

}
/// <summary>
/// 在视图栏中寻找和传入类型相匹配的视图,并且返回视图
/// </summary>
/// <param name="ViewType">视图类型</param>
/// <returns>视图对象</returns>
public IViewContent GetViewContent(Type ViewType)
{
//存在视图,返回
foreach(IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection)
{
if(content.GetType()==ViewType)
{
return content;
}
}
return null;
}
/// <summary>
/// 获取最近打开的项目
/// </summary>
/// <returns>返回最近打开的项目String列表</returns>
public IList<String> GetRecentProjects()
{
return FileService.RecentOpen.RecentProject;
}
/// <summary>
/// 获取最近打开的文件
/// </summary>
/// <returns>返回最近打开的文件String列表</returns>
public IList<String> GetRecentFiles()
{
return FileService.RecentOpen.RecentFile;
}
/// <summary>
/// 通过解决方案或者项目的Url地址进行加载
/// </summary>
/// <param name="Url"></param>
public void LoadSolutionOrProject(string Url)
{
ProjectService.LoadSolutionOrProject(Url);
}
/// <summary>
/// 新建解决方案
/// </summary>
public void CreatNewSolution()
{
new CreateNewSolution().Run();
}
/// <summary>
/// 打开解决方案
/// </summary>
public void OpenSolution()
{
}
/// <summary>
/// 获取当前项目节点
/// </summary>
/// <returns></returns>
public ProjectNode GetCurrentProject()
{
return ProjectBrowserPad.Instance.CurrentProject;
}
/// <summary>
/// 让项目Pad显示到最前
/// </summary>
public void LetProjectPadToFront()
{
ProjectBrowserPad.Instance.BringToFront();
}
/// <summary>
/// 返回当前项目的文件节点,里面提供对文件栏的操作(让文件处于打开状态等,AddNewFile等)
/// </summary>
/// <returns></returns>
public DirectoryNode GetCurrentDirectoryNode()
{
return ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedDirectoryNode;
}
/// <summary>
/// 更新文件点
/// </summary>
/// <param name="node"></param>
public void UpdateDirectoryNode(DirectoryNode node)
{
node.Project.Save();
          node.RecreateSubNodes();

}

      /// <summary>
      /// 打开默认的类添加框
      /// </summary>
      public void ShowClassCreateDialog()
      {
          using (NewFileDialog dialog = new NewFileDialog(null))
          {
              dialog.ShowDialog(WorkbenchSingleton.MainWin32Window);
          }
      }
}
}

要不通过SD内部机制添加文件到项目中去,就需要修改项目的内部配置文件,例如 SharpDevelop向导插件制作过程总结
打开以后发现有这些东西:
SharpDevelop向导插件制作过程总结
那么,我试了一下添加多一个Compile节点,Include里面是文件名,然后再工程中添加相应文件名的文件,然后打开工程,果然出来了,所以,手动化的东西需要程序化,,那么就要用到Xml文件操作技术,以前我只会用Linq to XML,但是发现读取不了,为什么呢,是命名空间作怪,上网查了一下,有命名空间的XML文件要以一种特殊的方式处理,下面给出程序化的以下步骤:
1.获取各个参数(项目名字,项目的目录地址,项目配置文件地址)
SharpDevelop向导插件制作过程总结
2.修改项目配置文件
一:先加载XML文件: SharpDevelop向导插件制作过程总结
二:新建一个XmlNamespaceManager类,获取节点 SharpDevelop向导插件制作过程总结
三:遍历节点,遇到有Compile节点的就在其后添加一个新的节点:
SharpDevelop向导插件制作过程总结
四:后续工作:包存文件,刷新SD项目
SharpDevelop向导插件制作过程总结

3.这样还不够,还要在项目位置添加实体类,并且填充模板代码
SharpDevelop向导插件制作过程总结
分别添加两个模板文件,里面是类的模板内容,记住要把他们的生成方式都变成嵌入的资源,然后利用反射获取这个程序集的这个txt文件的内容
SharpDevelop向导插件制作过程总结

获取到字符串,然后修改字符串里面的东西,再变成字节数组,然后:
SharpDevelop向导插件制作过程总结

SharpDevelop向导插件制作过程总结
,,OK了,新的文件模板文件已经到了项目里面,,大概就这样完成了。

3.还有向导的导航功能参看另一篇文章,地址: http://blog.sina.com.cn/s/blog_7b60d05f0101uyst.html 


这篇关于制作SharpDevelop插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580113

相关文章

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

mybatis框架基础以及自定义插件开发

文章目录 框架概览框架预览MyBatis框架的核心组件MyBatis框架的工作原理MyBatis框架的配置MyBatis框架的最佳实践 自定义插件开发1. 添加依赖2. 创建插件类3. 配置插件4. 启动类中注册插件5. 测试插件 参考文献 框架概览 MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射,为开发者提供了极大的灵活性和便利性。以下是关于M

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列5—Linux镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系