Мой пакет Visual Studio требует использования переменной EnvDTE.DTE, но он всегда возвращается как ноль. После прочтения многих хаков все они говорят, что используют метод 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 он просто не запускается.