VSIX 插件右键菜单
vs2017 插件开发
环境
WIN10 VS2017 CMMT VSIX
参考资源:
需要输出信息到窗口 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 位置说明
3.命令节
<Button guid="guidPublishFilePackageCmdSetFILE" id="PublishFileId" priority="0x0100" type="Button">
<Parent guid="guidPublishFilePackageCmdSetFILE" id="MyMenuGroupFile" />
<Strings>
<ButtonText>发布文件</ButtonText>
</Strings>
</Button>
4.快捷键节
<KeyBindings>
<KeyBinding guid="guidPublishFilePackageCmdSetFILE" id="PublishFileId" mod1="CONTROL" mod2="CONTROL" key1="1" key2="1" editor="guidVSStd97" />
</KeyBindings>