В пакете Visual Studio требуется использование переменной EnvDTE.DTE, но она всегда возвращается как null. После чтения многих хаков все говорят, что используют метод OnShellPropertyChange() (IVsShellPropertyEvents), но иногда он просто не срабатывает - как будто мое расширение никогда не заканчивает загрузку.VSIX: Получение объекта DTE
Я использую 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;
}
EDIT: Под экспериментальной Instance, она прекрасно работает и занимает около 5 секунд, чтобы инициализировать Однако после того, как развертывается как VSIX - это. просто не срабатывает.
VSSPROPID4 дал мне некоторые проблемы с двусмысленностью, поэтому я пошел с целым числом на данный момент. Я изменю условие и посмотрю, работает ли он сейчас - спасибо! –