Как изменить значок для команды меню в расширении Visual Studio? - PullRequest
4 голосов
/ 22 апреля 2011

Я опубликовал расширение Visual Studio 2010 под названием Duplicate Selection , которое в основном вызывается с помощью горячей клавиши. Однако он также имеет пункт меню в меню «Правка». Это все отлично работает, но я хотел бы изменить значок для пункта меню. Значок для пункта меню должен быть определен в файле .vsct:

<Commands package="guidDupSelectionPkg">
    <Groups>
        <Group guid="guidDupSelectionCmdSet" id="MyMenuGroup" priority="0x0600">
            <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_EDIT"/>
        </Group>
    </Groups>
    <Buttons>
        <Button guid="guidDupSelectionCmdSet" id="cmdidDupSelection" priority="0x0100" type="Button">
            <Parent guid="guidDupSelectionCmdSet" id="MyMenuGroup" />
            <Icon guid="guidCmdIcon" id="bmpCmdIcon" />
            <CommandFlag>DynamicVisibility</CommandFlag>
            <CommandFlag>DontCache</CommandFlag>
            <CommandFlag>DefaultInvisible</CommandFlag>
            <Strings>
                <CommandName>cmdidDupSelection</CommandName>
                <ButtonText>Duplicate Selection</ButtonText>
            </Strings>
        </Button>
    </Buttons>
    <Bitmaps>
        <!--<Bitmap guid="guidImages" href="Resources\Images_32bit.bmp" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows"/>-->
        <Bitmap guid="guidCmdIcon" href="Resources\cmdicon.bmp" usedList="bmpCmdIcon" />
    </Bitmaps>
</Commands>
<KeyBindings>
    <KeyBinding guid="guidDupSelectionCmdSet" id="cmdidDupSelection" key1="D" mod1="Alt" editor="guidVSStd97"/>
</KeyBindings>
<Symbols>
    <GuidSymbol name="guidDupSelectionPkg" value="{e5f7e157-f686-46b7-a588-85b08cdaa5f0}" />
    <GuidSymbol name="guidDupSelectionCmdSet" value="{85dcd5f2-19a5-4ee2-a99b-4fac4dc5c4ca}">
        <IDSymbol name="MyMenuGroup" value="0x1020" />
        <IDSymbol name="cmdidDupSelection" value="0x0100" />
    </GuidSymbol>
    <!--<GuidSymbol name="guidImages" value="{63df12b7-6bf0-4b19-843d-3ec69e08439d}">
        <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" />
    </GuidSymbol>-->
    <GuidSymbol name="guidCmdIcon" value="{e4cc0e42-a09d-4602-a965-d2b3f7e1f496}">
        <IDSymbol name="bmpCmdIcon" value="1" />
    </GuidSymbol>
</Symbols>

Вы можете видеть, что я прокомментировал старые определения, которые я больше не хочу использовать, и добавил свои собственные. В верхней части у меня есть <Icon guid="guidCmdIcon" id="bmpCmdIcon" />, который должен ссылаться на мое новое растровое изображение. Когда я запускаю проект под отладчиком, экспериментальный экземпляр VS все еще использует старый значок! Это ошибка в VS ?? Этот значок даже не определен в моем файле vsct больше. Как это могло все еще использовать это? Я что-то здесь не так сделал?

Любые предложения или предположения будут оценены. Я пробовал несколько разных вещей, но я официально поставлен в тупик.

1 Ответ

4 голосов
/ 22 апреля 2011

Visual Studio создает личный кеш для данных меню, чтобы не загружать библиотеки DLL, которые предоставляют ресурсы без необходимости. Удалите этот (скрытый) файл и повторите попытку отладки:

% LocalAppData% \ Microsoft \ VisualStudio \ 10.0Exp \ 1033 \ devenv.CTM

Эта статья описывает процесс слияния меню более подробно, если вам интересно.

...