VSPackage: добавьте пункт контекстного меню, где другое расширение может конфликтовать

Я установил инструменты разработчика Oracle для Visual Studio и пытаюсь создать расширение VSPackage для упаковки сценариев Oracle для выпуска. Я хотел бы, чтобы расширение работало, позволяя пользователю щелкнуть правой кнопкой мыши сценарий развертывания в обозревателе решений в проекте Oracle DB и получить параметр контекстного меню для объединения сценариев.

Я создал проект VSPackage и определил пункт меню. Я установил его родителем IDM_VS_CTXT_ITEMNODE. Если я запускаю экспериментальный экземпляр Visual Studio, загружаю решение и щелкаю правой кнопкой мыши по любым элементам в проектах Oracle Db, элемент меню отсутствует.

Кроме того, я попытался добавить элемент, отличный от sql (файл *.cs), в проект Oracle Db. Когда я щелкаю правой кнопкой мыши по этому элементу в проекте Oracle Db, мой пункт меню отсутствует.

Если я щелкну правой кнопкой мыши любой элемент (например, файл *.cs) в других типах проектов в том же решении, я увижу свой пункт меню.

Используя PowerShell, я запросил в IDE список CommandBars и, кажется, нашел идентификатор экземпляра для элемента проекта (DBProjScriptCtx — 0x0613), но, поскольку он не определен в vsshlids.h, я не могу ссылаться на него... или, по крайней мере, я не могу понять как ссылаться. Итак, мой вопрос: есть ли способ поместить мой пункт меню в контекстное меню, которое, по-видимому, принадлежит надстройке Oracle Developer Tools for VS?

Я работаю в VS 2013 (12.0.31101.00, обновление 4) с SDK VS 2013.

Среда тестового решения — установлен ODAC 12c Release 2 и инструменты разработчика Oracle для Visual Studio (12.1.0.1.2) и создано решение с одним проектом базы данных Oracle и одним проектом базы данных, отличной от Oracle. Использовал шаблон проекта пакета Visual Studio для создания пакета VSPackage.

Спасибо заранее за любую помощь.

* ОБНОВЛЕНИЕ * Этот вопрос устранен — см. VSPackage: добавьте пункт контекстного меню, где другое расширение может конфликтовать


person Sven Hoek    schedule 18.12.2014    source источник


Ответы (1)


Самый простой способ сделать это — выяснить, что представляет собой пара guid:id для контекстного меню, которое отображается, когда вы щелкаете правой кнопкой мыши узел сценария развертывания в обозревателе решений. Скорее всего, они могут отображать совершенно другое контекстное меню.

Используйте значение реестра EnableVSIPLogging, чтобы найти пару guid:id самого контекстного меню. Затем вам нужно создать группу в .VSCT. Ваши команды должны быть родительскими для группы, а группа должна быть родительской для контекстного меню Oracle.

Вам нужно будет самостоятельно определить символы в файле .VSCT, поскольку VSSDK, очевидно, не будет иметь этих значений в своих собственных заголовках :-)

С уважением, Эд Дор.

person Ed Dore    schedule 15.01.2015