Mein Visual Studio-Paket erfordert die Verwendung einer EnvDTE.DTE -Variable, aber es wird immer als Null zurückgegeben. Nach dem Lesen vieler Hacks sagen alle von ihnen, dass sie die OnShellPropertyChange() Methode (IVsShellPropertyEvents) verwenden sollen, aber manchmal wird sie nie ausgelöst - als ob meine Erweiterung niemals fertig geladen wäre.VSIX: Abrufen des DTE-Objekts
Ich benutze VS2010 und Prüfung gegen VSSPROPID_Zombie und ShellInitialized - keine Arbeit. ? :(
Irgendwelche Ideen Dies ist der Code Ich verwende:
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: Unter Experimental Instanz, es funktioniert perfekt und dauert ca. 5 Sekunden zu initialisieren Sobald jedoch als VSIX eingesetzt - es. einfach nicht ausgelöst.
VSSPROPID4 gab mir einige Mehrdeutigkeitsprobleme, weshalb ich mit der Ganzzahl vorerst ging. Ich werde den Zustand ändern und sehen, ob es jetzt funktioniert - danke! –