Сделайте расширение для создания разных меню для двух разных версий Visual Studio

В документации расширений Visual Studio говорится, что я могу применять условные выражения для элементов внутри vsct файл.

https://github.com/MicrosoftDocs/visualstudio-docs/blob/master/docs/extensibility/vsct-xml-schema-conditional-attributes.md

Я пытался создать разные меню для VS2019 и другое для других. Я создал условный символ компиляции, который определяет VS2019 для Visual Studio 2019+.

<Menu guid="GuidMenuSet" id="GroupIDMenuBaseGroup" priority="0x0100" type="Menu"
    Condition="Defined(VS2019)">
    <Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS"/>    
    <Strings>
        <ButtonText>My Text</ButtonText>
        <CommandName>MyText</CommandName>
    </Strings>
</Menu>
<Menu guid="GuidMenuSet" id="GroupIDMenuBaseGroup"
    priority="0x0100" type="Menu"
    Condition="!Defined(VS2019)">
    <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>    
    <Strings>
        <ButtonText>My Text</ButtonText>
        <CommandName>MyText</CommandName>
    </Strings>
</Menu>

Меню не отображается ни на VS2017, ни на VS2019.

1 ответ

Решение

Файл.VSCT компилируется в ресурс вывода двоичной таблицы команд (.cto), который затем внедряется в сборку пакета в качестве ресурса. Этот ресурс.cto компилируется во время сборки, а условные выражения оцениваются при создании ресурса.cto.

Поскольку ваша группа меню определяется при сборке пакета, ваша группа меню выглядит как родительская в зависимости от версии VS, с которой вы ее создали.

С уважением,