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会关闭,再打开时,插件就能用了.
卸载插件和其它一样,点击 工具->扩展和更新 会看到这个插件,点击卸载.

转载于:https://www.cnblogs.com/mirrortom/p/9184518.html

VSIX 插件右键菜单相关推荐

  1. Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置

    Chrome 插件开发 - 菜单选项 浏览器页面右键菜单选项设置 ① 核心代码演示 ② 效果展示 ③ 详细参数文档 插件右键菜单点击插件名跳转主页设置 ① 核心代码演示 ② 演示效果图 浏览器页面右键 ...

  2. Leaflet中使用Leaflet.contextmenu插件实现地图上添加鼠标右键菜单

    场景 Leaflet快速入门与加载OSM显示地图: Leaflet快速入门与加载OSM显示地图_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上,怎样使用Leaflet.co ...

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

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

  4. html 右键菜单 插件,Script Menu:自定义右键菜单

    Script Menu的开发背景 对于网页上的右键菜单用户可能再熟悉不过了,常见的右键菜单有复制.粘贴.刷新.另存为.查看网页源代码等,但是这些右键菜单都是chrome自己提供或者其他插件的菜单,你有 ...

  5. Gmail UI右键菜单[Greenbrowser插件][Beta V0.2]

    经常用Gmail,不过不太爱用快捷键,可惜Gmail的用户界面不支持鼠标右键.没有找到类似的插件,于是自己开发一个玩玩.其实,有点多此一举. 概述: 用Javascript开发的Greenbrowse ...

  6. 一起谈.NET技术,ASP.NET MVC2实现分页和右键菜单

    右键菜单非常方便,很多时候会用到.这篇文章将使用一个JQUERY的插件在asp.net mvc中实现右键菜单.本文还将介绍一下在asp.net mvc中如何实现简单的分页.效果如下图: 首先,下载此插 ...

  7. JQuery之ContextMenu(右键菜单)

    JQuery之ContextMenu(右键菜单) 插件下载地址: http://www.trendskitchens.co.nz/jquery/contextmenu/jquery.contextme ...

  8. java web右键菜单,win7右键菜单管理

    win7右键菜单管理 win7右键菜单管理工具下载(EasyContextMenu)v1.6免费版是一个Win7和Win8系统下能用的右键菜单管理工具,有些软件在安装后会在右键菜单中添加一个项目,时间 ...

  9. jQuery easyUI--选项卡右键菜单

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>选项卡 ...

最新文章

  1. PPT|工业互联网关键技术专利态势
  2. mysql利用CPU多核
  3. 性能测试知多少--系统计数器与硬件分析
  4. 南宁师范大学计算机与信息工程学院研究生,南宁师范大学计算机与信息工程学院(专业学位)职业技术教育保研...
  5. 征战蓝桥 —— 2013年第四届 —— C/C++A组第6题——逆波兰表达式
  6. 高级Java泛型:检索泛型类型参数
  7. 地图上绘制任意角度的椭圆_地图上的总椭圆
  8. TFS(Team Foundation Server)敏捷使用教程
  9. 微信小程序的一些数据调用方式
  10. 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)Word操作提示.doc...
  11. java中字节码_Java字节码执行图示
  12. Activiti的BPMN2.0中的子流程
  13. Unity(三)EasyTouch5的使用
  14. 在matlab编辑大于号,教你怎么用MathType编辑大于或小于符号
  15. abl如何调用xbl里面的protocol
  16. SpringMVC之CRUD和文件上传下载
  17. 魏文王问扁鹊的注释_魏文王问扁鹊曰阅读答案与翻译
  18. git color 让git有颜色
  19. GRAIL Efficient Time Series Representation Learning论文阅读笔记(一)
  20. 【考研英语语法】代词练习题

热门文章

  1. 什么是Redis、Redis的作用以及应用场景
  2. 【闲聊杂谈】深入剖析Java8新特性
  3. 不会Python爬虫?教你一个通用爬虫思路轻松爬取网页数据
  4. RabbitMQ 主题模式即topic类型交换机
  5. 19款Java开源Web爬虫
  6. QT在使用protocal的问题解决记录之std :: string和QByteArray之间的无损转换
  7. HTTP protocal
  8. 取余运算--递归与高精度问题
  9. 华信视频彩信接口文档
  10. 拆分数字:Excel函数不求人