vs2017 插件开发

环境

WIN10 VS2017 CMMT VSIX

参考资源:

vs菜单命令ID速查 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/internals/guids-and-ids-of-visual-studio-menus

需要输出信息到窗口 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/extending-the-output-window

命令快捷键 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/binding-keyboard-shortcuts-to-menu-items

目标

文件发布,实现右击一个文件,复制到指定目录中.

建立VSIX项目,添加自定义命令项

 

.vsct

VSIX项目建好后,会有这个XML文件,记录自定义命令的相关属性,例如命令名字,图标,摆放位置

关键节点:

0.项目相关符号定义节

<GuidSymbol name="guidPublishFilePackage" value="{936ecd2c-2941-43e8-afff-71bd15417822}" />

项目建立后,有一个和项目名对应的CS文件,其中常量PackageGuidString值与此节的value值对应

1.符号定义节

<GuidSymbol name="guidPublishFilePackageCmdSetFILE" value="{14c506cb-99dc-4922-addf-3cefe8fbbc64}">
  <IDSymbol name="MyMenuGroupFile" value="0x0100" />
  <IDSymbol name="PublishFileId" value="0x0101" />
</GuidSymbol>

一个GuidSymbol节,会对应一个命令类.(每添加一个自定义命令时,就会增加一个命令类,并且此处会增加节点)

GuidSymbol节定义命令guid属性,name定义guid属性名,value定义其值,该值对应命令类的成员-常量值CommandSet

IDSymbol用于定义命令的id属性.有两个,一个用于命令,一个用于命令所在的命令组

Id属性名(name)和值(value).会用于Group Button KeyBinding节点的对应属性

其中,用于Button节点的value值,一定要对应命令类的成员-常量值CommandId,否则点击命令时无效

2.命令组节

<Groups>
  <Group guid="guidPublishFilePackageCmdSetFILE" id="MyMenuGroupFile" priority="0x0600">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
  </Group>

<Groups>

Group节表示一个命令组,它的guid属性值,就是来源于符号节 GuidSymbol 的name的值,id属性值来源于符号节IDSymbol第1个 的name的值.   如果有多个命令组,会有多个group节

其中节点Parent的id属性的值,表示该命令组所在的位置.也就是在VS中菜单位置.

Parent 命令ID  位置说明

IDM_VS_CTXT_FOLDERNODE     在文件夹上点右键
IDM_VS_CTXT_CODEWIN     代码文件,如.cs文件在编辑器中点右键
IDM_VS_CTXT_ITEMNODE     在项目中的文件上点右键
IDM_VS_CTXT_NOCOMMANDS     没有菜单
IDM_VS_CTXT_PROJNODE     在项目节点上点右键
IDM_VS_CTXT_SOLNNODE     在解决方案上点右键
 

3.命令节

<Buttons>

<Button guid="guidPublishFilePackageCmdSetFILE" id="PublishFileId" priority="0x0100" type="Button">
    <Parent guid="guidPublishFilePackageCmdSetFILE" id="MyMenuGroupFile" />
  <Strings>
    <ButtonText>发布文件</ButtonText>
    </Strings>
  </Button>

</Buttons>
Button表示一个命令,guid属性来源于Group节的guid值,id属性来源于GuidSymbol节的第二个子节点IDSymbol 的name属性.
Parent节表示命令所在的Group,其guid值和id值,来源于Group节的对应值.
 

4.快捷键节

<KeyBindings>
  <KeyBinding guid="guidPublishFilePackageCmdSetFILE" id="PublishFileId" mod1="CONTROL" mod2="CONTROL" key1="1" key2="1" editor="guidVSStd97" />
</KeyBindings>

设置命令的快捷键,guid,id属性值指明命令按钮.
mod1,mod2,key1,key1的值说明快捷键使用方式是 "按下ctrl键,然后再按1,再按一下1".
例如在VS中注释的快捷键是,CTRL+E+C.
 
添加自定义命令
 
在VSIX项目中添加新项,选Custom Command.
添加后,VSCT文件和项目包.cs文件会自动增加该命令的相关节点以及初始化方法.
命令执行逻辑代码写在该命令类的Execute方法中.
 
 
编译与安装
 
VSIX可以直接调试,点F5后,会打开一个模拟的VS,在这个VS中可以新建项目,文件.然后测试下自定义命令,可以断点调试.
项目编译后会得到一个.vsix文件.可以选择release版本的这个文件,然后双击安装,VS会关闭,再打开时,插件就能用了.
卸载插件和其它一样,点击 工具->扩展和更新 会看到这个插件,点击卸载.
 

VSIX 插件右键菜单的更多相关文章

  1. VSIX 插件右键菜单(2)

    编译项目然后发布 // 获取当前右击的活动项目 EnvDTE.Project activeProj = ProjectHelpers.GetActiveProject(); // 获取 编译选项 Re ...

  2. Jquery 右键菜单(ContextMenu)插件使用记录

    目前做的项目需要在页面里面用右键菜单,在网上找到两种jquery的右键菜单插件,但是都有各种问题.所以就自己动手把两种插件结合了下. 修改后的右键菜单插架可以根据绑定的触发页面元素不同,复用同一个菜单 ...

  3. 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件

    004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的    窗口 > 关闭所有文档    这个导航栏: 在 任何程序集,任何命名空间,任 ...

  4. vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单

    今天分享的不是技术,今天给大家分享个插件,针对现有的vue右键菜单插件,大多数都是需要使用插件本身自定义的标签,很多地方不方便,可扩展性也很低,所以我决定写了一款自定义指令调用右键菜单(vuerigh ...

  5. 几款jQuery右键菜单插件介绍

    在网页中使用自定义右键菜单,实现上皆为使用javascript禁用浏览器默认的右键菜单,然后在网页中响应鼠标右键事件,弹出自定义的菜单. 类似右键菜单的组件网上很多.一般而言,改变浏览器的默认菜单应当 ...

  6. IE浏览器右键菜单插件开发(下篇)——如何用c#安装、卸载IE右键插件

    建立Installer安装类,如图: 代码如下: using Microsoft.Win32; using ResourceShare.UserClient.Common; using System; ...

  7. js(jquery)右键菜单插件的实现

    今天开发一个项目的时候需要一个模拟鼠标右键菜单的功能.也就是在网页点击鼠标右键的时候不是弹出系统的菜单而是我们制定的内容.这样可以拓展右键的功能.实现过程不多说了,写出来的代码和效果如下: js部分: ...

  8. 仿EXCEL插件,智表ZCELL产品V1.7 版本发布,增加自定义右键菜单功能

    详细请移步 智表(ZCELL)官网www.zcell.net 更新说明  这次更新主要应用户要求,主要解决了自定义右键菜单事件的支持,并新增了公式中自定义函数传参.快捷键剪切等功能,欢迎大家体验使用. ...

  9. 为vscode开发一款svn右键菜单扩展

    在我平时的工作中会经常用到svn blame这个命令,但是vscode现有的svn扩展普遍都不能自定义右键菜单. 所以我产生一个想法:自己动手为vscode开发一款svn的扩展来定制右键菜单,本文记录 ...

随机推荐

  1. html5-attr和prop

    ###1.什么是attrbute和property attribute(attr) html标签的预定义属性 checked html标签的自定义属性         a eg: <input ...

  2. java Date时间的各种转换方式和Mysql存时间类型字段的分析

    一:各种Date之间的转换方法 public class TimeTest { public static void main(String[] args) { Date date = new Dat ...

  3. HDU 5898 odd-even number

    题目:odd-even number 链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5898 题意:给一个条件,问l 到r 之间有多少满足条件的 ...

  4. 在linux系统中实现各项监控的关键技术(1)--cpu使用率的计算

    转载自 Linux中通过/proc/stat等文件计算Cpu使用率 http://www.blogjava.net/fjzag/articles/317773.html proc文件系统 /proc文 ...

  5. 安装VC++2015运行库时出现0x80240037错误

    很多时候,当我们将开发好的软件部署到用户的机器上时总会出现各种意想不到的错误,最近在一台原版Windows7系统的电脑上安装VC++运行库的时候,莫名的出现安装失败,然后错误代码为:0x8024003 ...

  6. JavaSE从入门到精通

      1.JavaSE的安装 windows下安装完成后,配置环境变量如下: JAVA_HOME       C:\Program Files (x86)\Java\jdk1.8.0_91 CLASSP ...

  7. java中的序列化和反序列化

    package cn.zhou; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.Fil ...

  8. github---无命令可视化界面操作

    最近工作需要,研究了一下git,这个东西挺实用,给我的感觉并不是那么简单使用,我认为还可以再深入的研究一下,挺好玩的~ 说一下我的学习路线: 1.先看的廖老师的博客:https://www.liaox ...

  9. LodopJS代码模版的加载和赋值

    Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍JS模版的加载和赋值.两种模版都可以存入一下地方进行调用,比 ...

  10. 转载:实现MATLAB2016a和M文件关联

    转载自http://blog.csdn.net/qq_22186119 新安装MATLAB2016a之后,发现MATLAB没有和m文件关联 每次打开m文件后都会重新打开一次MATLAB主程序 后来发现 ...