我想在Visual Studio中添加一个内部扩展,它应该连接到编辑器上下文菜单--无论打开的是什么类型的文件。我可以动态地处理启用可见性的问题,但基本上我希望它能在任何类型的编辑器文件上被访问。
我一直找不到正确的父命令组id来管理自定义按钮显示在编辑器上下文菜单上。我怀疑不是一个ID,而是几个,但任何指导,我应该看什么。有一个困难的时间弄清楚什么是正确的父命令Id是挂到编辑器上下文菜单。
具体来说,我需要能够将 "在浏览器中查看 "选项添加到Visual Studio无法识别为HTMLWeb文件的文件中(即使它们被映射到相应的编辑器)。
相关的。有没有什么合理的方法来发现菜单命令和组名?在SharedCommandPlace.vsct中摸索是我最接近的方法,但即使是这样也很难匹配到实际的菜单项。
我能够找出上下文菜单的正确命令组。事实证明,不同的编辑器都使用不同的上下文ID,所以必须作为单独的菜单来管理,所以这变得很混乱。
步骤
HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\General
键和EnableVSIPLogging值为1来启用日志。这给信息提供了一个 menu group
样,它看起来像这样。
---------------------------
VSDebug Message
---------------------------
Menu data:
Guid = {D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}
GuidID = 358
CmdID = 53
Type = 0x00000400
Flags = 0x00000000
NameLoc = ASPX Context
---------------------------
OK
---------------------------
重要的值是GUID和CommandID。
将Guid和CommandID添加到 Symbols
这样注册命令集,将 Guid 映射到 CommandSet,将 CommandId 映射到上下文菜单值。
<GuidSymbol name="aspxContextCommandSet" value="{D7E8C5E1-BDB8-11D0-9C88-0000F8040A53}">
<IDSymbol name="aspxContextMenu" value="0x0035"/>
</GuidSymbol>
注意,值映射到以十六进制值表示的CommandID。
然后将这个组引用为你的命令组(MyMenuGroup)的父组。Groups
部分。
<Group guid="guidViewInBrowserPackageCmdSet" id="MyMenuGroup" priority="0x0000">
<Parent guid="aspxContextCommandSet" id="aspxContextMenu"/>
</Group>
你引用你为命令按钮创建的菜单组,并指向上一步创建的上下文菜单。
如果你想为多个编辑器(例如ASPX、HTML和代码编辑器,我就是这样做的)重复这个过程,为你的每个编辑器添加GuidSymbol和Group.你将最终为同一个MenuGroup指向不同的父级菜单的多个Group条目,并且所有的Group都将适当地激活。
效果很好,但你可能要确保你过滤你的 OleMenuCommand
对象具有 BeforeQueryStatus
事件处理程序,以确保菜单只在你实际可以处理的时候才会显示。
我需要同样的东西,我使用了。
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
所以,我只是改变了id。请看。https: /msdn.microsoft.comen-uslibrarymicrosoft.visualstudio.shell.vsmenus.idm_vs_ctxt_codewin.aspx。
启用VSIPLogging注册表值对VS 2015仍然有效。你只需要在HKEY_CURRENT_USER/SOFTWARE/Microsoft/VisualStudio/14.0/General下添加一个EnableVSIPLogging DWORD设置为1。
如果CTRL+SHIFT+菜单弹出或菜单选择没有导致该对话框,那么有可能是该菜单项没有作为VSCT资源执行。
也就是说,你可能需要做一点实验,因为编辑器和设计师并不需要使用与代码编辑器相同的上下文菜单。
另外,你可能需要尝试一下Mads的 "可扩展性工具 "扩展,地址是 https:/visualstudiogallery.msdn.microsoft.comab39a092-1343-46e2-b0f1-6a3f91155aa6。.
他为VSCT文件添加了一个很好的自动完成功能,非常有用。