Пункты меню VSCT не отображаются

Предварительная версия Visual Studio 2019 16.5.0 1.

Я пытаюсь отобразить пункты меню в группе или в другом меню.

В настоящее время элементы меню отображаются в меню View/Other Windows в Visual Studio, если я указываю им на IDG_VS_WNDO_OTRWNDWS1, но если я пытаюсь указать их на 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>

Любая подсказка, что не так с моим кодом?

1 ответ

Решение

В настоящее время элементы меню отображаются в меню View/Other Windows в Visual Studio, если я укажу им на IDG_VS_WNDO_OTRWNDWS1.

Родителем кнопки должен быть groupтип. А такжеIDG_VS_WNDO_OTRWNDWS1 одна дочерняя группа IDG_VS_VIEW_DEV_WINDOWS, так что все работает так, как мы и ожидали.

Но если я попытаюсь указать им на MyMenuGroup, они просто не появятся.

MyMenuGroup а также IDG_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>

И не забудьте определить 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=>Other windows):

Дополнительно: Что касается НеопределенногоIDM_VS_MENU_EXTENSIONS, Я разместил отзыв здесь. На мой взгляд, это может быть одна из проблем с документом или пакетом инструментов сборки, любой, кто заинтересован в этом, может отследить проблему и получить там самую свежую информацию.

Надеюсь, это поможет:)

Другие вопросы по тегам