Comment : créer une autre instance de Visual Studio et s'y attacher

Les compléments Visual Studio sont déconseillés dans Visual Studio 2013. Vous devriez mettre vos compléments à niveau vers des extensions VSPackage. Pour plus d'informations sur les mises à jour, consultez FAQ : conversion de compléments en extensions VSPackage.

Il peut parfois être utile de créer par programme une instance de Visual Studio ou un d'effectuer un attachement à une instance spécifique de Visual Studio qui est déjà en cours d'exécution. Si deux instances de Visual Studio sont exécutées sur un système et si la même solution est ouverte pour les deux (par exemple, une instance génère une solution tandis que l'autre débogue une génération), vous pouvez programmer votre complément de sorte qu'il différencie les deux.

Vous pouvez, par exemple, effectuer les opérations suivantes :

  • démarrer une instance de Visual Studio basée sur un chemin d'accès à un fichier ou à une solution ;

  • effectuer un attachement à une instance de Visual Studio basée sur un chemin d'accès à un fichier ou à une solution ;

  • charger un fichier ou une solution dans une instance existante de Visual Studio ;

  • créer une instance de Visual Studio qui s'arrête dans les conditions suivantes :

    • le compte de références externes à la fois sur l'objet DTE et sur l'objet Solution est de 0.

      – et –

    • l'environnement de développement intégré (IDE) n'est pas présenté à l'utilisateur ou n'est pas sous son contrôle.

  • créer une instance de Visual Studio qui reste chargée même dans les conditions suivantes :

    • le compte de références externes à la fois sur l'objet DTE et sur l'objet Solution est de 0.

    • L'IDE est présenté à l'utilisateur.

      – et –

    • L'IDE est sous contrôle de l'utilisateur.

Les objets retournés peuvent être castés en leurs objets respectifs, tels que DTE2 et Solution2.

Notes

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée.Ces procédures ont été développées avec les paramètres de développement généraux actifs.Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils.Pour plus d'informations, consultez Paramètres Visual Studio.

Exemple

Pour créer une instance de Visual Studio, utilisez la fonction CreateObject (voir CreateObject Function) ou System.Activator.CreateInstance. Lorsque vous utilisez la fonction CreateObject dans Visual Basic, vous pouvez passer des valeurs de "VisualStudio.DTE.11.0.". Les exemples ci-après illustrent ces méthodes.

' CreateObject method 1 - VisualStudio.DTE.11.0.
Public Sub Exec(ByVal commandName As String, ByVal executeOption _
As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
Object,  ByRef handled As Boolean) Implements IDTCommandTarget.Exec
   handled = False
   If executeOption = _
      vsCommandExecOption.vsCommandExecOptionDoDefault Then
      If commandName = "VBTestAddin.Connect.VBTestAddin" Then
          CreateNewInstance1(_applicationObject)
          handled = True
          Exit Sub
      End If
   End If
End Sub

Private Sub CreateNewInstance1(ByVal dte As DTE2)
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction. _
    CreateObject("VisualStudio.DTE.11.0", "")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
' GetTypeFromProgID and CreateInstance method.
Public Sub Exec(ByVal commandName As String, ByVal executeOption _
As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
Object,  ByRef handled As Boolean) Implements IDTCommandTarget.Exec
   handled = False
   If executeOption = _
      vsCommandExecOption.vsCommandExecOptionDoDefault Then
      If commandName = "VBTestAddin.Connect.VBTestAddin" Then
          CreateNewInstance2(_applicationObject)
          handled = True
          Exit Sub
      End If
   End If
End Sub

Private Sub CreateNewInstance2(ByVal dte As DTE2)
    Dim Type As System.Type
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.11.0")
    inst = System.Activator.CreateInstance(Type, True)
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    CreateNewInstance2(_applicationObject);
}

private void CreateNewInstance2(DTE2 dte)
{
    System.Type Type;
    object inst;
    EnvDTE80.DTE2 dte80Obj;
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
    inst = System.Activator.CreateInstance(Type, true);
    dte80Obj = (EnvDTE80.DTE2)inst;
    System.Windows.Forms.MessageBox.Show
      (dte80Obj.DisplayMode.ToString());
}
// Create a new instance of Visual Studio by using 
// GetTypeFromProgID and CreateInstance.
private void CreateNewInstance1()
{
    System.Type type = System.Type.GetTypeFromProgID
    ("VisualStudio.DTE.11.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

Dans l'exemple Visual Basic, les deux instructions créent une instance de l'IDE Visual Studio. La première instruction crée une instance directement, tandis que la seconde crée une instance en créant une nouvelle solution.

Pour obtenir une référence à une instance existante de l'IDE Visual Studio, vous pouvez utiliser la fonction GetObject (GetObject Function). Vous pouvez utiliser l'une ou l'autre de ces deux instructions :

Private Sub GetInstance1 ()
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction.GetObject(, _
    "VisualStudio.DTE.11.0")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub

' -or-
Dim inst As Object
inst = Microsoft.VisualBasic.Interaction.GetObject(, _
  "VisualStudio.Solution.8.0")
' ---------------------------
' -or-
' Change the path to your application.
Dim inst As Object
inst = Microsoft.VisualBasic.Interaction.GetObject _
  ("C:\Projects\WindowsApplication1\WindowsApplication1.sln")
' ---------------------------
' -or-
' Change the path to your application.
Dim inst As Object
inst = Microsoft.VisualBasic.Interaction.GetObject _
  ("C:\Projects\WindowsApplication1\WindowsApplication1.sln", _
  "VisualStudio.Solution.8.0")

Voir aussi

Concepts

Inscription d'un complément

Autres ressources

Création de compléments et d'Assistants