Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Nous recommandons d’utiliser Visual Studio 2017

Comment : obtenir des références aux objets DTE et DTE2

Remarque Remarque

Dans Visual Studio 2013, les compléments sont déconseillés. Nous vous recommandons de mettre vos compléments à niveau aux extensions VSPackage. Pour plus d'informations, consultez FAQ : conversion de compléments en extensions VSPackage.

Dans l'assembly EnvDTE, l'objet DTE représente l'environnement de développement intégré (IDE) Visual Studio et constitue l'objet de niveau le plus élevé dans la hiérarchie du modèle Automation. Pour gagner l'accès au modèle d'automation principal, une application d'automation doit référencer cet objet.

Cependant, l'ajout de l'assembly EnvDTE80 fournit un objet de niveau supérieur de substitution nommé DTE2 et il remplace l'objet DTE. Même si les deux objets agissent—et se programment—de la même façon, DTE2 contient cependant de nouvelles fonctionnalités et héberge un certain nombre d'objets et de collections nouveaux et mis à jour.

Lorsque vous créez des nouvelles applications d'automation, nous vous recommandons de créer des références à objet—à l'objet DTE2 pour fournir l'accès aux nouvelles fonctionnalités et l'objet DTE pour fournir l'accès au reste de la fonctionnalité principale. Nous vous recommandons également que si possible vous utilisez les nouveaux objets et collections dans DTE2 au lieu de celles dans DTE.

Les étapes suivantes indiquent comment référencer l'objet DTE2. (La même procédure s'applique à l'objet DTE.) Avant d'ajouter une référence à un objet, vous devez ajouter des références aux assemblys et à la bibliothèque de types appropriée. Pour plus d'informations, consultez Comment : ajouter des références aux espaces de noms Automation.

L'identificateur programmatique (ProgID) à utiliser pour Visual Studio 2013 est VisualStudio.DTE.12.0. Vous pouvez ensuite effectuer le transtypage de l'objet retourné dans une interface DTE2.

Lorsqu'ils sont appelés, les propriétés, méthodes et événements DTE2 renvoient des types DTE. Par exemple, contrairement à ce que vous pourriez attendre, Solution retourne un objet Solution, et non un objet Solution2. C'est pourquoi, quand vous utilisez les membres DTE2 ou d'autres membres de types, vous devez leur appliquer explicitement une conversion de type. Cette conception assure la cohérence et réduit la confusion. L'assembly EnvDTE80.dll retourne la même interface de manière homogène pour toutes les propriétés DTE2. Retourner la version d'interface la plus récente est embrouillant—pour l'exemple, si une version ultérieure de Visual Studio avait un type DTE3, certaines interfaces pourraient retourner DTE, un DTE2, et d'autres encore DTE3. En outre, ce mode de fonctionnement pourrait poser des problèmes liés à COM Interop car les « 2 » interfaces de EnvDTE80 dérivent des interfaces EnvDTE. Par exemple, Window2 est issue de Window, si une propriété DTE était ajoutée à Window2, cela cacherait la propriété Windows et ne fonctionnerait pas correctement avec les applications COM.

Remarque Remarque

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. Ces éléments dépendent de l'édition de Visual Studio dont vous disposez et des paramètres que vous utilisez. Pour plus d'informations, consultez Paramètres Visual Studio.

Pour référencer l'objet DTE2 en Visual Basic et C#

  • Dans votre code, ajoutez ceci:

    ' 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");
    

Pour référencer l'objet DTE ou DTE2 en Visual C++ (ATL)

  • Dans votre code, ajoutez ceci:

    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;
    
Afficher: