VSIX项目,添加右键菜单(二)
1、新建VSIX项目后,里边基本什么都没有
项目上右击,添加新建项
随便起一个名字,例如我的是 RightCmd
2、里边有一个vsct的文件,这个文件相当于MVC里的html,是用于配置显示的。
打开它,里边前几行,有一个引入的文件,vsshlids.h,这个文件,你可以去 项目路径\packages\Microsoft.VSSDK.BuildTools.14.3.25407\tools\vssdk\inc (注意版本号)下找,里边是vs自带的命令
其中比较关键的几个
guidSHLMainMenu 是vs主窗体用的(不知道对不对,但意思就是说vs的主要窗体)。
IDM_VS_CTXT_SOLNNODE 是指的解决方案资源管理器里的 解决方案,
IDM_VS_CTXT_SOLNFOLDER 是指的解决方案资源管理器里的 解决方案里的文件夹,不是项目里的哈,这个文件夹是虚拟的,没有实际的文件夹映射,
IDM_VS_CTXT_PROJNODE 是指的解决方案资源管理器里的 项目,
IDM_VS_CTXT_FOLDERNODE 是指的解决方案资源管理器里的 项目里的文件夹,
IDM_VS_CTXT_ITEMNODE 是指的解决方案资源管理器里的 项目里的项,就例如cs、js文件
其他的暂时不是特别清楚
3、这个vsct文件呢,和平常的定义界面的逻辑一样,你得先定义
<Symbols> 里边定义一个 GuidSymbol,name随便起一个(guidItemNodeCmdSet),value 是一个guid,你可以使用vs自带的guid生成工具
选择注册表格式,点“复制”,把他放到你的GuidSymbol 的 value 里
这就相当于 定义了一个变量容器,变量容器名 叫 guidItemNodeCmdSet,对映的一个绝对名字 ,就是那串GUID
里边定义了一个变量,名 叫 ItemNode, 相对名字是 0x1004(这个随便,但是在同一个变量容器里,这个值不能一样)
4、下边,定义一个Group,相当于一个容器
在Groups 里边加上这个
<!-- 项 --> <Group guid="guidItemNodeCmdSet" id="ItemNode" priority="0x0100"> <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE"/> </Group>
其中,Group的name 就是上边的那个变量容器,ID 就是上边的变量
注意的是 Parent,guid写的是guidSHLMainMenu ,id 是 IDM_VS_CTXT_ITEMNODE(是指的解决方案资源管理器里的 项目里的项,就例如cs、js文件),这表示,如果产生效果,那就是在解决方案里的项上产生
此示例,就是指的在 项上右击,在右击菜单里新增一个按钮
如果你想把按钮放到项目上、文件夹上等等,那就改变这个值,取值在本文(2)里边。如果想同时在多个上边都有按钮,那就重复 步骤3、4,把id改一下
5、按钮
在 Buttons 节点下,新增一个按钮(自动生成的那个也行)
注意,Parent里的guid 和id 改成 group的guid 和id
<Button guid="guidUpdateBtn" id="UpdateClassFromDbCmdId" priority="0x0100" type="Button"> <Parent guid="guidItemNodeCmdSet" id="ItemNode"/> <Icon guid="guidImages" id="bmpPicSearch" /> <!-- 下边两个是用来控制按钮的是否可用的 --> <CommandFlag>DefaultDisabled</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> <Strings> <ButtonText>右键菜单</ButtonText> </Strings> </Button>
6、运行,按一下F5,启动 vs的运行实例,然后随便打开一个项目
好了,右键菜单出现了
微软的教程,用谷歌浏览器,可以翻译成中文
https://docs.microsoft.com/zh-cn/visualstudio/extensibility/extending-menus-and-commands
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器