Freigeben über


Gewusst wie: Abrufen von Verweisen auf das DTE-Objekt und das DTE2-Objekt

Hinweis

Add-Ins sind seit Visual Studio 2013 veraltet.Es wird empfohlen, für Ihre Add-Ins ein Upgrade auf VSPackage-Erweiterungen durchführen.Weitere Informationen finden Sie unter FAQ: Konvertieren von Add-Ins in VSPackage-Erweiterungen.

In der EnvDTE-Assembly stellt das DTE-Objekt die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio dar. Hierbei handelt es sich um das Objekt der obersten Ebene in der Hierarchie des Automatisierungsmodells. Alle Automatisierungsanwendungen müssen einen Verweis auf dieses Objekt enthalten, um auf das zentrale Automatisierungsmodell zugreifen zu können.

Mit der neuen EnvDTE80-Assembly wird jedoch ein anderes Objekt der obersten Ebene mit dem Namen DTE2 bereitgestellt. Dieses tritt an die Stelle des DTE-Objekts. Beide Objekte sind im Hinblick auf Verhalten und Programmierung vergleichbar, allerdings bietet DTE2 neue Funktionalität und umfasst eine Reihe neuer und aktualisierter Objekte und Auflistungen.

Beim Erstellen neuer Automatisierungsanwendungen wird empfohlen, Verweise auf beide Objekte zu erstellen – auf das DTE2-Objekt, um den Zugriff auf neue Funktionen zu ermöglichen, und auf das DTE-Objekt, um den Zugriff auf den restlichen Teil der Basisfunktionen zu ermöglichen. Es empfiehlt sich auch, grundsätzlich die neuen Objekte und Auflistungen in DTE2 zu verwenden anstatt die in DTE enthaltenen.

In den folgenden Schritten wird veranschaulicht, wie Sie einen Verweis auf das DTE2-Objekt abrufen. (Dieselbe Prozedur gilt für das DTE-Objekt.) Bevor Sie einen Verweis auf ein Objekt hinzufügen, müssen Sie Verweise auf die entsprechende Assembly und Typbibliothek hinzufügen. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen von Verweisen auf Automatisierungsnamespaces.

Der zu verwendende Programmbezeichner (ProgID) für Visual Studio 2013 lautet VisualStudio.DTE.12.0. Sie können dann das zurückgegebene Objekt in eine DTE2-Schnittstelle umwandeln.

Wenn die DTE2-Eigenschaften, -Methoden und -Ereignisse aufgerufen werden, werden die DTE-Typen zurückgegeben. So gibt zum Beispiel Solution ein Solution-Objekt zurück, kein Solution2-Objekt, wie möglicherweise zu erwarten wäre. Aus diesem Grund müssen Sie DTE2-Member oder andere Typmember explizit umwandeln. Mit diesem Design werden die Einheitlichkeit erhöht und Verwirrungen reduziert. Die Assembly EnvDTE80.dll gibt konsistent für alle DTE2-Eigenschaften dieselbe Schnittstelle zurück. Die Rückgabe der aktuellen Schnittstellenversion wäre sonst uneinheitlich – wenn beispielsweise eine zukünftige Version von Visual Studio den DTE3-Typ aufweisen muss, könnten einige Schnittstellen DTE, andere DTE2 und wieder andere DTE3 zurückgeben. Zudem könnte es bei COM-Interop zu Problemen kommen, da die mit "2" gekennzeichneten Schnittstellen in EnvDTE80 von den EnvDTE-Schnittstellen abgeleitet werden. Window2 wird zum Beispiel von Window abgeleitet. Würde eine DTE-Eigenschaft zu Window2 hinzugefügt werden, würde die Windows-Eigenschaft ausgeblendet werden, und die ordnungsgemäße Funktionsweise mit COM-Anwendungen wäre nicht mehr gewährleistet.

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten.Die Elemente werden durch die verwendete Edition von Visual Studio und die gewählten Einstellungen bestimmt.Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.

So verweisen Sie in Visual Basic und C# auf das DTE2-Objekt

  • Fügen Sie im Code Folgendes hinzu:

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE.12.0")
    
    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.12.0");
    

So verweisen Sie in Visual C++ (ATL) auf das DTE-Objekt oder das DTE2-Objekt

  • Fügen Sie im Code Folgendes hinzu:

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CLSID clsid;
    CLSID clsid2;
    CLSIDFromProgID(L"VisualStudio.DTE.12.0",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.12.0",&clsid2);
    CComPtr<IUnknown> punk;
    CComPtr<IUnknown> punk2;
    // Get a running instance of Visual Studio.
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    hr = GetActiveObject(clsid2,NULL,&punk2);
    m_pDTE = punk;
    m_pDTE2 = punk2;
    

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen von Verweisen auf Automatisierungsnamespaces

Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager

Konzepte

Anfügen an bestimmte Instanzen der IDE

Add-In-Registrierung

Diagramm "Automationsobjektmodell"

Weitere Ressourcen

Erstellen von Add-Ins und Assistenten