VSCT 菜单项未显示

VSCT menu items not showing

Visual Studio 2019 16.5.0 预览版 1.

我正在尝试让我的菜单项显示在一个组中或不同的菜单上。

目前,如果我将菜单项指向 IDG_VS_WNDO_OTRWNDWS1,则菜单项显示在 visual studio 的 View/Other 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>

知道我的代码有什么问题吗?

Currently the menu items show up in the View/Other Windows menu on visual studio if I point them to IDG_VS_WNDO_OTRWNDWS1.

按钮的父级应该是 group 类型。而 IDG_VS_WNDO_OTRWNDWS1IDG_VS_VIEW_DEV_WINDOWS 的一个子组,所以它按我们预期的那样工作。

But if I try to point them to MyMenuGroup, they just don't appear.

MyMenuGroupIDG_VS_WNDO_OTRWNDWS1也代表Group类型。一组的父级应该是一个菜单而不是一组,否则将不起作用。看我的另一期.

所以如果你想使用你的自定义组,你应该在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>

并且不要忘记在 GuidSymbol 中定义 MyMenu :

  <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 可以以这种方式显示你的两个 windows(View=>Other windows):

另外:关于未定义的IDM_VS_MENU_EXTENSIONS,我已经post反馈了here。在我看来,这可能是关于文档或构建工具包的一个问题,任何对此感兴趣的人都可以跟踪该问题并在那里获取最新信息。

希望对您有所帮助:)