首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSIX:向Visual Studio编辑器上下文菜单添加菜单项

VSIX:向Visual Studio编辑器上下文菜单添加菜单项
EN

Stack Overflow用户
提问于 2015-08-01 15:24:36
回答 3查看 9K关注 0票数 10

我有一个内部扩展,我想添加到Visual Studio,它应该挂接到编辑器上下文菜单-无论什么类型的文件是打开的。我可以动态地启用/visibility,但本质上我希望它可以在任何类型的编辑器文件中访问。

我找不到正确的父命令/组I来管理以在编辑器上下文菜单上显示自定义按钮。我怀疑不是一个Id,而是几个,但有任何关于我应该看什么的指导。很难弄清楚正确的父命令Id是什么,才能连接到编辑器上下文菜单。

具体地说,我需要能够将在浏览器中查看选项添加到Visual Studio不能识别为HTML/Web文件的文件中(即使它们被映射到适当的编辑器)。

相关:有没有合理的方法来发现菜单命令和组名?浏览SharedCommandPlace.vsct是我最接近的体验,但即使是这样,也很难与实际的菜单项匹配。

EN

回答 3

Stack Overflow用户

发布于 2015-08-02 14:24:08

我能够为上下文菜单找出正确的命令组。事实证明,各种编辑器都使用单独的上下文It,因此必须作为单独的菜单进行管理,因此很快就会变得混乱。

步骤

  1. I使用HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General键和EnableVSIPLogging值1启用日志记录。
  2. I随后导航到编辑器,将鼠标放在空白区域上,按CTRL-SHIFT组合键,然后右键单击鼠标

这为信息提供了一个类似于menu group的信息,它看起来像这样:

代码语言:javascript
运行
复制
---------------------------
VSDebug Message
---------------------------
Menu data:
    Guid = {D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}
    GuidID = 358
    CmdID = 53
    Type = 0x00000400
    Flags = 0x00000000
    NameLoc = ASPX Context
---------------------------
OK   
---------------------------

重要的值是GUID和CommandID。

像这样在Symbols下添加Guid和命令ID,以注册将Guid映射到CommandSet和将CommandId映射到上下文菜单值的命令集:

代码语言:javascript
运行
复制
<GuidSymbol name="aspxContextCommandSet" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
  <IDSymbol name="aspxContextMenu" value="0x0035"/>
</GuidSymbol>

请注意,该值映射到表示为十六进制值的CommandID。

然后在Groups部分中引用该组作为命令组(MyMenuGroup)的父组:

代码语言:javascript
运行
复制
<Group guid="guidViewInBrowserPackageCmdSet" id="MyMenuGroup" priority="0x0000">
  <Parent guid="aspxContextCommandSet" id="aspxContextMenu"/>
</Group>

参照为命令按钮创建的菜单组,并指向在上一步中创建的关联菜单。

如果您想为多个编辑器执行此操作(即,例如ASPX、HTML和代码编辑器)您可以通过同时添加GuidSymbol和Group对每个编辑器重复此过程。您将在不同的父节点上得到同一MenuGroup点的多个Group条目,所有条目都将相应地激活。

工作得很好,但是您可能必须确保使用BeforeQueryStatus事件处理程序过滤OleMenuCommand对象,以确保只有在您实际可以处理的时候才会显示菜单。

票数 15
EN

Stack Overflow用户

发布于 2015-09-01 18:42:25

我需要同样的东西,我使用:

代码语言:javascript
运行
复制
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>

所以,我只是更改了id。请参阅:https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.vsmenus.idm_vs_ctxt_codewin.aspx

票数 6
EN

Stack Overflow用户

发布于 2015-08-02 09:04:22

EnableVSIPLogging注册表值仍然适用于VS 2015。您只需在HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General.下添加一个设置为1的EnableVSIPLogging DWORD值

如果CTRL+SHIFT +菜单弹出或菜单选择没有产生该对话框,则可能是有问题的菜单项没有作为VSCT资源实现。

也就是说,您可能需要尝试一下,因为编辑器和设计器不需要使用与代码编辑器相同的上下文菜单。

此外,您可能想在https://visualstudiogallery.msdn.microsoft.com/ab39a092-1343-46e2-b0f1-6a3f91155aa6 (2017)或https://marketplace.visualstudio.com/items?itemName=MadsKristensen.ExtensibilityEssentials2019 (2019)上尝试Mads“可扩展性工具”扩展。

他为VSCT文件添加了一个很好的自动补全功能,非常有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31759396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档