VSIX: получение объекта DTE

Мой пакет Visual Studio требует использования переменной EnvDTE.DTE, но она всегда возвращается как null. во многих хакерских атаках все они говорят об использовании метода OnShellPropertyChange () (IVsShellPropertyEvents), но иногда он просто не срабатывает - как будто мое расширение никогда не завершает загрузку.

Я использую VS2010 и проверяю как VSSPROPID_Zombie, так и ShellInitialized - нет работы.: (

Есть идеи? Это код, который я использую:

public int OnShellPropertyChange(int propid, object var) {
            if (propid == -9053 || (int) __VSSPROPID.VSSPROPID_Zombie == propid) { // -9053 = ShellInit
                try {
                    if ((bool) var == false) {
                        Dte = GetService(typeof (SDTE)) as DTE;
                        Flow.Dte = Dte;

                        var shellService = GetService(typeof (SVsShell)) as IVsShell;

                        if (shellService != null)
                            ErrorHandler.ThrowOnFailure(shellService.UnadviseShellPropertyChanges(_cookie));

                        _cookie = 0;
                    }
                } catch {

                }
            }

            return VSConstants.S_OK;
        }

РЕДАКТИРОВАТЬ: В экспериментальном экземпляре он работает отлично, и его инициализация занимает около 5 секунд. Однако после развертывания как VSIX он просто не срабатывает.

9
задан hb. 25 September 2010 в 04:44
поделиться