Событие DTEEvents.OnStartupComplete не работает для VSPackage (VSSDK2010) - PullRequest
2 голосов
/ 08 января 2012

В конструкторе Package я добавил обработчик события OnStartupComplete.Но когда я запускаю код, обработчик событий не вызывается.Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2012

В VS есть ошибка, которая перерабатывает объект DTEEvents (с вашими обработчиками событий), если вы не сохраните явную ссылку на него. Вам нужно что-то вроде этого:

[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string)]
class MyPackage : Package
{
    DTEEvents _EventsObj;

    protected override void Initialize()
    {
        var dte = (EnvDTE.DTE)GetService(typeof(EnvDTE.DTE));
        _EventsObj = dte.Events.DTEEvents;
        _EventsObj.OnStartupComplete += OnStartupComplete;
    }

    void OnStartupComplete()
    {
    }
}
0 голосов
/ 06 января 2013

Смотрите мой ответ здесь: http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/eb1e8fd1-32ad-498c-98e9-25ee3da71004

Я полагаю, что это потому, что перед подпиской на событие вы могли бы создать и распаковать свой объект DTE. Это огромная неприятность, и довольно удивительно, что объект DTE не может быть легко передан через местоположение службы для целей подписки на события; но это, кажется, виновник.

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

0 голосов
/ 08 мая 2012

Попробуйте переместить ваш код из конструктора пакета в метод Initialize () пакета.Это должно помочь, но если это не так, протестируйте какой-нибудь другой UICONTEXT _ ???значения для вашего атрибута автозагрузки, может быть UICONTEXT_NoSolution ?

...