Расширение Visual Studio с настраиваемой командой и подкомандами - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь создать простое расширение Visual Studio с использованием Visual Studio 2017, которое добавляет команды в контекстное меню проекта в обозревателе решений.Я хотел бы добавить свои команды, сгруппированные вместе в основной опции, а затем из этой основной опции я хотел бы, чтобы мои команды были доступны, как, например, Add-> New item, Add-> Existing item, Add-> Class и т. Д.. работает в контекстном меню проекта.

После ознакомления с документацией, вот что я придумал для моего файла vsct:

<Commands package="guidMainItemPackage">      
  <Groups>
    <Group guid="guidMainItemPackageCmdSet" id="MyMenuGroup" priority="0x0600" />              
    <Group guid="guidMainItemPackageCmdSet" id="SubMenuGroup" priority="0x0601" />              
  </Groups>

  <Buttons>
    <Button guid="guidMainItemPackageCmdSet" id="MainItemId" priority="0x0100" type="Button">
      <Parent guid="guidMainItemPackageCmdSet" id="MyMenuGroup" />
      <Icon guid="guidImages" id="bmpPic1" />
      <Strings>
        <ButtonText>Invoke MainItem</ButtonText>
      </Strings>
    </Button>

    <Button guid="guidMainItemPackageCmdSet" id="cmdidSubItem" priority="0x0101" type="Button">
      <Parent guid="guidMainItemPackageCmdSet" id="SubMenuGroup" />
      <Icon guid="guidImages1" id="bmpPic1" />
      <Strings>
        <ButtonText>Invoke SubItem</ButtonText>
      </Strings>
    </Button>
  </Buttons>

  <Bitmaps>     
    <Bitmap guid="guidImages" href="Resources\MainItem.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough" />
    <Bitmap guid="guidImages1" href="Resources\SubItem.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough" />
  </Bitmaps>
</Commands>

<CommandPlacements>
  <CommandPlacement guid="guidMainItemPackageCmdSet" id="MyMenuGroup" priority="0xFFFF">
    <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE" />
  </CommandPlacement>    
  <CommandPlacement guid="guidMainItemPackageCmdSet" id="SubMenuGroup" priority="0xFFFE">
    <Parent guid="guidMainItemPackageCmdSet" id="MyMenuGroup" />
  </CommandPlacement>
</CommandPlacements>

<Symbols>
  <GuidSymbol name="guidMainItemPackage" value="{30f66380-eeeb-48bf-8554-0d63d87194af}" />  
  <GuidSymbol name="guidMainItemPackageCmdSet" value="{98ee7e8f-c421-4f0e-a9e9-86eab5141563}">
    <IDSymbol name="MyMenuGroup" value="0x1020" />
    <IDSymbol name="SubMenuGroup" value="0x1028" />
    <IDSymbol name="MainItemId" value="0x0100" />
    <IDSymbol value="4129" name="cmdidSubItem" />
  </GuidSymbol>
  <GuidSymbol name="guidImages" value="{b3c2dfad-df35-4e6b-880e-8018ce6c3d0f}">
    <IDSymbol name="bmpPic1" value="1" />
    <IDSymbol name="bmpPic2" value="2" />
    <IDSymbol name="bmpPicSearch" value="3" />
    <IDSymbol name="bmpPicX" value="4" />
    <IDSymbol name="bmpPicArrows" value="5" />
    <IDSymbol name="bmpPicStrikethrough" value="6" />
  </GuidSymbol> 
  <GuidSymbol value="{93d3ad22-fe33-40da-b85f-a926952e3914}" name="guidImages1">
    <IDSymbol name="bmpPic1" value="1" />
    <IDSymbol name="bmpPic2" value="2" />
    <IDSymbol name="bmpPicSearch" value="3" />
    <IDSymbol name="bmpPicX" value="4" />
    <IDSymbol name="bmpPicArrows" value="5" />
    <IDSymbol name="bmpPicStrikethrough" value="6" />
  </GuidSymbol>
</Symbols>

Итак, в основном я создалдобавили две пользовательские команды в мой проект, кнопку для каждой из команд, группу для каждой из кнопок и расположение команд для каждой из групп (все остальное - просто сгенерированный шаблон vsct по умолчанию).

Моя проблема в том, что при использовании приведенного выше кода отображается первая команда, в которой нет подпунктов.Каким будет правильный vsct контент для достижения желаемого макета?

1 Ответ

0 голосов
/ 27 декабря 2018

После еще нескольких проб и ошибок (в основном ошибок) я решил просмотреть определения команд самой Visual Studio, чтобы найти аналогичную группу команд, и я наконец-то нашел ответ.Вот шаги, которые необходимо предпринять для реализации этой структуры:

  1. Создайте группу и установите родительский элемент этой группы в контекстном меню проектов Visual Studio.
  2. Создайте меню, чьеparent - это группа, созданная на шаге 1.
  3. Создайте вторую группу, родителем которой является меню, созданное на шаге 2.
  4. Создайте кнопки только для подпунктов.
  5. Createкомандные места для подэлементов, созданных на шаге 4, где вы помещаете каждую кнопку в группу, созданную на шаге 3.
...