Как динамически добавлять команды в VSPackage (пакет Visual Studio 2013)

Я разработал Addin для VS2012, он отображается в контекстном меню окна кода (редактора). Есть меню, в котором есть подменю. Пункты подменю добавляются динамически, например..

 Cut
 Copy
 Paste
   .
   .
   .
 My Menu >  sub menu item 1
            sub menu item 2
            sub menu item 3

Теперь для Visual Studio 2013 мне нужно преобразовать (почти переписать) надстройку как VSPackage.

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

Загрузите исходный код (VSPackage для VS2013) по адресу: http://sdrv.ms/INbIu2.

Вопрос

Как я могу создать меню и динамическое подменю в VSPackage?

Я был бы очень признателен за любой пример.

Большое спасибо!


person wafers    schedule 04.12.2013    source источник


Ответы (2)


Используйте флаг DynamicItemStart в определении команды в файле .vsct: Как динамически добавлять пункты меню.

Кроме того, проверьте соответствующие темы «Пошаговое руководство».

person Sergey Vlasov    schedule 05.12.2013
comment
Спасибо SergeyVlasov, позвольте мне следовать руководству/учебнику и посмотреть, что произойдет. - person wafers; 05.12.2013
comment
Хорошо, ссылка была полезной. Это было не слишком просто, однако, мне удалось это сделать. Есть только одна проблема, Сначала он показывает командную кнопку, мне нужно сначала нажать ее, прежде чем он начнет показывать мне меню. Я не могу справиться с этим. (пожалуйста, посмотрите изображение, которое я загрузил в том же месте: sdrv.ms/INbIu2) Не могли бы вы мне что-нибудь предложить? пожалуйста? - person wafers; 10.12.2013
comment
Чтобы отобразить меню, ваш пакет должен быть загружен, но VS по умолчанию не загружает пакеты при запуске (он загружает их, например, когда вы вызываете команду пакета, такую ​​​​как ваша командная кнопка). Добавьте атрибут ProvideAutoLoad для основного класса пакета msdn.microsoft.com/en-us /библиотека/bb166762.aspx - person Sergey Vlasov; 10.12.2013

Создаваемый вами пакет VSPackage по-прежнему может добавлять и удалять команды с помощью тех же API, которые вы использовали в своей надстройке.

person JaredPar    schedule 04.12.2013
comment
Спасибо JaredPar, я знаю, что это возможно, вопрос в том, как я могу это сделать. Реализация VSPackage кажется сложной, но запутанной. Слишком много зависимостей мешало мне понять поток и динамическое поведение. - person wafers; 05.12.2013
comment
Это не похоже на правду. Для команд добавления пунктов меню требуется экземпляр надстройки, который недоступен для расширений. Все эти вызовы задокументированы в MSDN как устаревшие в VS 2013, что означает, что на них нельзя полагаться в будущем (и это будущее может уже наступить с VS 2015). - person Jason Williams; 24.12.2014