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. 常见的 CSRF、XSS、sql注入、DDOS流量攻击

    CSRF攻击 :跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性 攻击者一般会使用吸引人的图片去引导用户点击进 ...

  2. 【Python3练习题 010】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    #参考http://www.cnblogs.com/iderek/p/5959318.html n = num = int(input('请输入一个数字:'))  #用num保留初始值 f = []  ...

  3. 关于PHP批量图片格式转换的问题--本文转成webp, 其他过程格式一样

    最近要把项目中的图片全部生成webp格式, 过程整理一下,    (直接存在本地,或者图片链接存在数据库都可以看看) 首先,肯定是批量处理, 一个php处理不了这么多, 会爆内存的, 个人建议用aja ...

  4. CMake--常用指令

    1 . ADD_DEFINITIONS 向 C/C++ 编译器添加 -D 定义,比如 在CMakeList.txt文件中添加: ADD_DEFINITIONS(-DENABLE_DEBUG -DABC ...

  5. 【学亮开讲】Oracle存储过程教学笔记(一)20181115

    --创建业主序列起始值为11 ; --不带传出参数的存储过程 create or replace procedure pro_owners_add ( v_name varchar2,--名称 v_a ...

  6. Linux上的一些基本常用命令

    上传下载文件:// 首先安装lrzsz # yum -y install lrzsz // 上传文件,执行命令rz,会跳出文件选择窗口,选择好文件,点击确认即可.# rz // 下载文件,执行命令sz ...

  7. Oracle 中sql文件的导入导出

    导出 一般导入的时候我用的是命令行 imp c##zs/@orcl fromuser=c##zs touser=c##zs file=D:\java\.dmp ignore=y c##zs 是创建的用 ...

  8. java学习之—栈

    /** * 栈 * Create by Administrator * 2018/6/11 0011 * 上午 10:20 **/ public class StackX { private int ...

  9. GitHub创建仓库,并与git本地仓库关联

    登录后头像右上角点击: 起名再create 后 会跳转到下面页面: 先在git上复制执行第一条指令,创建一个readme文档 然后再用第二条初始化仓库 第三步将readme文档添加至暂存区 然后提交一 ...

  10. Python包的相对导入时出现问题解决

    资料参考: https://www.cnblogs.com/ArsenalfanInECNU/p/5346751.html 在python导入包,如下: from .units import * 经常 ...