Добавить пункт в меню "Добавить" узла решения или проекта в обозревателе решений

Как добавить подменю для пункта "Добавить", если щелкнуть правой кнопкой мыши на обозревателе решений Visual Studio?

Мне нужно добавить один элемент подменю, который будет отображаться при щелчке правой кнопкой мыши по решению Visual Studio, и перейти в пункт "Добавить" в этом меню.

Я пытаюсь использовать.vsct (против пакета). Пожалуйста, помогите мне с ценными предложениями

1 ответ

Решение

Конечно, есть похожие вопросы, но это, кажется, особый случай...

В общем, вам нужно знать идентификатор команды и пакета, который вы хотите расширить. Я обычно делаю это, включив EnableVSIPLogging опцию в реестре, как описано в этой статье: http://blogs.msdn.com/b/dr._ex/archive/2007/04/17/using-enablevsiplogging-to-identify-menus-and-commands-with-vs-2005-sp1.aspx. EnableVSIPLogging опция была введена в Visual Studio 2005, но все еще работает в любой новой версии.

Однажды EnableVSIPLogging Если эта опция включена, вы можете отобразить требуемую информацию, щелкнув по пункту меню (или любому другому элементу пользовательского интерфейса, который связан с командой), одновременно нажимая Ctrl+Shift. Это покажет окно сообщения, содержащее guid пакета и идентификатор команды / меню; 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 файл; этот вопрос может вас заинтересовать: используя vsx, как создать подменю с командами?

Читая ответ на другой вопрос, вы можете задаться вопросом, как эти парни вычислили имена для командных руководств... эти имена определяются vsshlids.h заголовочный файл, который входит в состав Visual Studio SDK. Итак, для приведенного выше руководства мы находим...

// Guid for Shell's group and menu ids
DEFINE_GUID (guidSHLMainMenu,
    0xd309f791, 0x903f, 0x11d0, 0x9e, 0xfc, 0x00, 0xa0, 0xc9, 0x11, 0x00, 0x4f);

Мы можем использовать guidSHLMainMenu для определения группы...

<Group guid="your-command-set" id="your-group-id">
    <Parent guid="guidSHLMainMenu" id="..." />
</Group>

Я ожидал найти IDM_VS_CTXT_ постоянный (или что-то похожее) в vsshlids.h это соответствует идентификатору команды, но нет... Вместо этого я нашел cmdidShellWindowNavigate7 а также cmdidShellWindowNavigate5 константы в stdidcmd.h; и просто попробовал их...

Сначала я создал новые id-символы для двух командных групп...

<IDSymbol name="grpIdProjectContextAdd" value="0x1080" />
<IDSymbol name="grpIdSolutionContextAdd" value="0x1081" />

И команда...

<IDSymbol name="cmdIdAddItemHelloWorld" value="0x1082" />

Чем я определил новые группы; и использовал полученные идентификаторы команд в качестве родителя...

<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>

Конечно, мне нужна кнопка (которая находится в Add меню проекта по умолчанию).

<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>

Чтобы кнопка также появилась в Add меню узла решения, я использую команду размещения...

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

Для меня это немного странно использовать cmdidShellWindowNavigate7 а также cmdidShellWindowNavigate5 константы, но в результате я получил это...

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