工欲善其事,必先利其器,作为程序员我们很大部分时间在和ide打交道,好的插件可以大大提高我们的编程效率 , 我开发过几个vs插件来解决一键生成dbmodels,快速部署到服务器,总结下来最关键的还是对于Menu这块的扩展 , 因为这是插件功能的最常见的入口之一,下面给大家介绍vs插件各种menu的扩展
环境准备这里我使用vs2022版本 , 要开发vs插件的话,需要vs安装插件开发模块
打开vs 然后点击 工具 -> 获取工具和功能
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402593156-0.png)
文章插图
然后勾选Visual Studio扩展开发
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402594263-1.png)
文章插图
小试牛刀安装好之后,打开vs就可以选择到 vsix project 模板了
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402596313-2.png)
文章插图
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/04025a460-3.png)
文章插图
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402593621-4.png)
文章插图
- MenuDemoVSIXPackage.cs(是插件的入口类)
- source.extension.vsixmanifest(插件的描述 , 比如版本,说明等描述性配置的地方)
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402596293-5.png)
文章插图
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402594248-6.png)
文章插图
- 一个png (图标)
- 一个vsct (不管几个Command都只会有一个这个文件 , 包含所有自定义菜单的配置)
- TestCommand.cs (自定义菜单的命令 , 点击菜单的执行操作逻辑在里面)
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/04025aU1-7.png)
文章插图
会看到我们的Command名称:Invoke TestCommand按钮在vs的[工具]这个菜单里面,点击它会出一个弹框,如下
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/04025932c-8.png)
文章插图
好了,以上完成初体验后,回到本文要重点介绍:vs的Menu扩展
vs的Menu扩展上面我们说到 vsct文件 , 我们的按钮是展示在Vs哪种类型的Menu下 , 就是在这个文件定义的,我们一起看下这个vsct文件,关键部分我都用不同颜色来高亮显示
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402596111-9.png)
文章插图
- stdidcmd.h
- vsshlids.h
{VS安装目录}\VSSDK\VisualStudioIntegration\Common\Inc ,
例如我的目录是
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VSSDK\VisualStudioIntegration\Common\Inc
vsct 文件中有用到宏 IDM_VS_MENU_TOOLS = 0x0005,
它表示 VS 上的 Tools 菜单的ID,这个宏即位于 vsshlids.h 头文件中 。
如果不引入这个头文件,那么就得写0x0005,导致可读性很差和难维护!
![visual studio插件开发-Menu](http://img.zhejianglong.com/231019/0402592a7-10.png)
文章插图
- Menus 是菜单/工具栏的集合 。菜单是Commands的容器 。
- Groups 决定菜单的位置
- Buttons 表示命令按钮/菜单项
- Bitmaps 按钮/菜单项的图标配置
https://github.com/MicrosoftDocs/visualstudio-docs/blob/main/docs/extensibility/internals/designing-xml-command-table-dot-vsct-files.md
一级菜单
<Groups> <Group guid="guidMenuDemoVSIXPackageCmdSet" id="MyMenuGroup" priority="0x0600"> <!-- 这个guid和id决定了菜单的位置 --> <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/> </Group></Groups>
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 【pytest官方文档】解读-开发可pip安装的第三方插件
- 提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件
- 苹果手机红包秒收怎么设置(苹果红包插件黑科技)
- 从0开始写一个简单的vite hmr 插件
- 钩子 【pytest官方文档】解读-插件开发之hooks 函数
- 插件化编程之WebAPI统一返回模型
- 超详细 R及R Studio下载安装教程
- 浅谈 Golang 插件机制
- .net程序员的android studio 初体验 (环境设置2022年10月)
- 中 ?打造企业自己代码规范IDEA插件