Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 附加项以添加解决方案资源管理器中“解决方案”或“项目”节点的菜单_.net_Visual Studio Extensions_Vsx_Vspackage_Vsct - Fatal编程技术网

.net 附加项以添加解决方案资源管理器中“解决方案”或“项目”节点的菜单

.net 附加项以添加解决方案资源管理器中“解决方案”或“项目”节点的菜单,.net,visual-studio-extensions,vsx,vspackage,vsct,.net,Visual Studio Extensions,Vsx,Vspackage,Vsct,在visual studio解决方案资源管理器上单击鼠标右键时,如何为“添加”菜单项添加子菜单 我必须添加一个子菜单项,该子菜单项将在右键单击visual studio解决方案时显示,并移动到该菜单中的“添加”选项 我正在尝试使用.vsct(vs包)。请帮我提些有价值的建议当然,也有类似的问题,但这似乎是一个特例 通常,您需要知道要扩展的菜单的命令和包id。我通常通过在注册表中启用enablevsiploging选项来实现这一点,如本文所述: . Visual Studio 2005引入了Ena

在visual studio解决方案资源管理器上单击鼠标右键时,如何为“添加”菜单项添加子菜单

我必须添加一个子菜单项,该子菜单项将在右键单击visual studio解决方案时显示,并移动到该菜单中的“添加”选项


我正在尝试使用.vsct(vs包)。请帮我提些有价值的建议

当然,也有类似的问题,但这似乎是一个特例

通常,您需要知道要扩展的菜单的命令和包id。我通常通过在注册表中启用
enablevsiploging
选项来实现这一点,如本文所述: . Visual Studio 2005引入了
EnableVSIPLogging
选项,但在任何较新版本中仍然有效

启用
EnableVSIPLogging
选项后,您可以在按住Ctrl+Shift的同时单击菜单项(或与命令互连的任何其他UI元素),显示所需信息。这将显示一个包含包guid和命令/菜单id的消息框;Ctrl+C将显示的菜单或命令数据复制到剪贴板,顺便说一句。如果您对菜单数据感兴趣(如果是上下文菜单,请在悬停项目之前按Ctrl+Shift)

这是我在我的机器上得到的

---------------------------
VSDebug Message
---------------------------
Menu data:
Guid = {D309F791-903F-11D0-9EFC-00A0C911004F}
GuidID = 4
CmdID = 850
Type = 0x00000100
Flags = 0x00000000
NameLoc = A&dd
---------------------------
OK   
---------------------------
菜单信息可用于编写
VSCT
文件;这个问题可能会引起您的兴趣:

在阅读另一个问题的答案时,您可能想知道这些人是如何计算出命令guid的名称的。。。这些名称由Visual Studio SDK中包含的
vsshlids.h
头文件定义。因此,对于上面显示的guid,我们发现

// Guid for Shell's group and menu ids
DEFINE_GUID (guidSHLMainMenu,
    0xd309f791, 0x903f, 0x11d0, 0x9e, 0xfc, 0x00, 0xa0, 0xc9, 0x11, 0x00, 0x4f);
我们可以使用
guidshlmain菜单
进行组定义

<Group guid="your-command-set" id="your-group-id">
    <Parent guid="guidSHLMainMenu" id="..." />
</Group>
还有一个命令

<IDSymbol name="cmdIdAddItemHelloWorld" value="0x1082" />
为了使按钮也出现在解决方案节点的
Add
菜单中,我使用了一个命令放置

<CommandPlacements>
    <CommandPlacement guid="your-command-set" 
                      id="cmdIdAddItemHelloWorld" priority="0x1100">
        <Parent guid="your-command-set" id="grpIdSolutionContextAdd" />
    </CommandPlacement>
 </CommandPlacements>

对我来说,使用
cmdidShellWindowNavigate7
cmdidShellWindowNavigate5
常数,但结果是


您能提供一个带有示例代码的文件链接吗?谢谢@Matze,这真的很有帮助。我想查找一些关于vsct的文档,因为我仍然不知道您是如何发现“cmdidShellWindowNavigate7”实际上是“Project”添加菜单的
<Groups>
    <Group guid="your-command-set" id="grpIdProjectContextAdd">
        <Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate7" />
    </Group>
    <Group guid="your-command-set" id="grpIdSolutionContextAdd">
        <Parent guid="guidSHLMainMenu" id="cmdidShellWindowNavigate5" />
    </Group>
</Groups>
<Commands>
    <Button guid="your-command-set" 
            id="cmdIdAddItemHelloWorld" priority="0x1100" type="Button">
        <Parent guid="your-command-set" id="grpIdProjectContextAdd" />
        <Strings>
            <ButtonText>Hello World</ButtonText>
        </Strings>
    </Button>
</Commands>
<CommandPlacements>
    <CommandPlacement guid="your-command-set" 
                      id="cmdIdAddItemHelloWorld" priority="0x1100">
        <Parent guid="your-command-set" id="grpIdSolutionContextAdd" />
    </CommandPlacement>
 </CommandPlacements>