Mon package Visual Studio nécessite l'utilisation d'une variable EnvDTE.DTE, mais il revient toujours à zéro. Après avoir lu sur de nombreux hacks, tous disent d'utiliser la méthode OnShellPropertyChange() (IVsShellPropertyEvents), mais parfois il ne se déclenche jamais - comme si mon extension ne finissait jamais le chargement.VSIX: Obtention d'un objet DTE
J'utilise VS2010 et vérifie à la fois VSSPROPID_Zombie et ShellInitialized - pas de travail. ? :(
Toutes les idées Voici le code que je utilise:
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: En instance expérimentale, cela fonctionne parfaitement et prend environ 5 secondes pour initialiser Cependant, une fois déployé en tant que VSIX - il. tout simplement ne se déclenche pas.
VSSPROPID4 m'a donné quelques problèmes d'ambiguïté, c'est pourquoi je suis allé avec l'entier pour l'instant. Je vais changer la condition et voir si cela fonctionne maintenant - merci! –