Visual Studio 2019 16.5.0预览版1。
我试图让菜单项显示在一个组中或在另一个菜单中。
当前,如果我将菜单项指向IDG_VS_WNDO_OTRWNDWS1,则这些菜单项会显示在Visual Studio的“视图/其他Windows”菜单中,但是如果我尝试将其指向MyMenuGroup,它们就不会出现。该代码将运行,但是菜单项永远不会显示在菜单上。如果我尝试将按钮指向IDM_VS_MENU_EXTENSIONS,它甚至都不会编译,并显示以下错误:
Undefined 'Parent/@id' attribute 'IDM_VS_MENU_EXTENSIONS' in a <Button> element
下面是我的代码:
<Groups>
<Group guid="MyGroupMenuSet" id="MyMenuGroup" priority="0x0100">
<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" />
</Group>
</Groups>
<Buttons>
<Button guid="My_ExtVS2019PackageCmdSet" id="cmdidMyWindowCommand" priority="0x0100" type="Button">
<!-- <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" /> -->
<Parent guid="MyGroupMenuSet" id="MyMenuGroup" />
<Strings>
<ButtonText>My Main Window</ButtonText>
</Strings>
</Button>
<Button guid="My_ExtVS2019PackageCmdSet" id="cmdidMyOtherControlCommand" priority="0x0100" type="Button">
<!--<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" />-->
<Parent guid="MyGroupMenuSet" id="MyMenuGroup" />
<Strings>
<ButtonText>My Other Window</ButtonText>
</Strings>
</Button>
</Buttons>
</Commands>
<Symbols>
<!-- This is the package guid. -->
<GuidSymbol name="My_ExtVS2019Package" value="{a28e16ed-f550-4cac-b087-f3728834a026}" />
<GuidSymbol value="{3d62bd83-4a3e-4e04-8ea8-800ea9316e90}" name="My_ExtVS2019PackageCmdSet">
<IDSymbol value="256" name="cmdidMyWindowCommand" />
<IDSymbol value="257" name="cmdidMyOtherControlCommand" />
</GuidSymbol>
<GuidSymbol value="{dd7dd38d-bf53-408e-baa4-c5c7c7774f19}" name="MyGroupMenuSet">
<IDSymbol value="4128" name="MyMenuGroup" />
<IDSymbol value="256" name="cmdidCommand1" />
</GuidSymbol>
</Symbols>
任何提示我的代码有什么问题吗?
答案 0 :(得分:1)
当前,菜单项显示在的“查看/其他Windows”菜单中 visual studio,如果我将它们指向IDG_VS_WNDO_OTRWNDWS1。
Button的父级应该是group
类型。 IDG_VS_WNDO_OTRWNDWS1
是IDG_VS_VIEW_DEV_WINDOWS
的一个子组,因此它可以像我们期望的那样工作。
但是,如果我尝试将它们指向MyMenuGroup,它们就不会出现。
MyMenuGroup
和IDG_VS_WNDO_OTRWNDWS1
也代表Group
类型。一组的父项应该是一个菜单,而不是一组菜单,否则它将不起作用。请参阅我的另一期here。
因此,如果要使用自定义组,则应在xx.vsct
中使用此结构:
Button => MyMenuGroup(group) => one menu(menu) => IDG_VS_WNDO_OTRWNDWS1(group)
而不是:Button => MyMenuGroup(group) => IDG_VS_WNDO_OTRWNDWS1(group)
解决方法:
更改此部分:
<Groups>
<Group guid="MyGroupMenuSet" id="MyMenuGroup" priority="0x0100">
<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" />
</Group>
</Groups>
收件人:
<!--<Groups>
<Group guid="guidTestVSIXWindowPackageCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
</Group>
</Groups>-->
<Menus>
<Menu guid="guidTestVSIXWindowPackageCmdSet" id="MyMenu" priority="0x0100" type="Menu">
<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
<Strings>
<ButtonText>My Two Windows</ButtonText>
<CommandName>MyTwoWindows</CommandName>
</Strings>
</Menu>
</Menus>
<Groups>
<Group guid="guidTestVSIXWindowPackageCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidTestVSIXWindowPackageCmdSet" id="MyMenu"/>
</Group>
</Groups>
不要忘记在MyMenu
中定义GuidSymbol
:
<GuidSymbol value="{dd7dd38d-bf53-408e-baa4-c5c7c7774f19}" name="MyGroupMenuSet">
<IDSymbol value="4128" name="MyMenuGroup" />
<IDSymbol value="256" name="cmdidCommand1" />
<IDSymbol name="MyMenu" value="41" />
</GuidSymbol>
然后,VS可以通过这种方式来显示两个窗口(View =>其他窗口):
此外:对于未定义的IDM_VS_MENU_EXTENSIONS
,我已经发布了反馈here。我认为,这可能是有关文档或构建工具包的问题,对此感兴趣的任何人都可以跟踪该问题并在那里获取最新信息。
希望有帮助:)