VSIX: DTE-Objekt wird abgerufen

8

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 werden sie nie ausgelöst - als ob meine Erweiterung nie fertig geladen wäre.

Ich verwende VS2010 und überprüfe gegen VSSPROPID_Zombie und ShellInitialized - keine Arbeit. : (

Irgendwelche Ideen? Dies ist der Code, den ich verwende:

%Vor%

BEARBEITEN: Unter Experimentelle Instanz funktioniert es perfekt und benötigt etwa 5 Sekunden zum Initialisieren. Sobald es jedoch als VSIX bereitgestellt wird, wird es einfach nicht ausgelöst.

    
hb. 25.09.2010, 03:14
quelle

4 Antworten

6

Ich sehe hier ein paar Probleme:

  • Sie sollten __VSSPROPID4.VSSPROPID_ShellInitialized (definiert in Microsoft.VisualStudio.Shell.Interop.10.0) anstelle von -9083 für Lesbarkeit verwenden
  • Sie sollten prüfen, ob ShellInitialized auf true gesetzt ist (obwohl die Überprüfung, ob Zombie falsch ist, korrekt ist)
  • Denken Sie daran, dass ShellInitialized beim Start von VS zu einmal geändert wird. Dies zu überprüfen, ist der richtige Ansatz, wenn Ihr Paket beim Start automatisch geladen wird (was passieren kann, bevor VS vollständig betriebsbereit ist). Die meisten Pakete sollten jedoch nicht beim Start automatisch geladen werden, sondern stattdessen bei Bedarf von einer Benutzeraktion geladen werden, die Ihren Paketcode erfordert. Sie können dann in Ihrer Paketklasseninitialisierungsmethode nach dem DTE-Dienst suchen.
Aaron Marten 25.09.2010, 17:22
quelle
23

Versuchen Sie den folgenden Befehl:

%Vor%     
kiii 16.03.2012 09:37
quelle
5

Wenn Sie eine MEF-Komponente haben, ist der einfachste Weg, zu einem DTE -Objekt zu gelangen, wie folgt

Fügen Sie zuerst einen Verweis auf Microsoft.VisualStudio.Shell.Immutable.10 hinzu. Fügen Sie dann einen MEF-Import für SVsServiceProvider hinzu. Dieses Objekt verfügt über eine GetService-Methode, die für DTE

abgefragt werden kann %Vor%     
JaredPar 25.09.2010 05:15
quelle
3

Ich weiß, dass Sie bereits eine Antwort ausgewählt haben, aber Sie haben angegeben, dass Sie das MEF nicht verwenden wollten, also dachte ich, ich würde nur aus Gründen der Vollständigkeit eine Alternative veröffentlichen ....; p

%Vor%     
Terrance 24.11.2010 13:15
quelle