Gewusst wie: Erstellen einer Instanz und Anfügen an eine andere Instanz von Visual Studio

In einigen Fällen bietet sich das programmgesteuerte Erstellen einer neuen Instanz von Visual Studio oder das Anfügen an eine bestimmte Instanz von Visual Studio an, die bereits ausgeführt wird. Wenn auf einem System zwei Instanzen von Visual Studio ausgeführt werden und die gleiche Projektmappe geöffnet ist (eine Instanz führt beispielsweise einen Projektmappenbuild und die andere einen Debugbuild durch), können Sie das Add-In so programmieren, dass eine Unterscheidung der Instanzen möglich ist.

Sie haben z. B. folgende Möglichkeiten:

  • Starten einer Instanz von Visual Studio basierend auf einem Pfad zu einer Datei oder einer Projektmappe.

  • Anfügen an eine Instanz von Visual Studio basierend auf einem Pfad zu einer Datei oder einer Projektmappe.

  • Laden einer Datei oder Projektmappe in eine vorhandene Instanz von Visual Studio.

  • Erstellen einer neuen Instanz von Visual Studio, wobei die Instanz in den folgenden Fällen heruntergefahren wird:

    • Die Anzahl der externen Verweise auf das DTE-Objekt und das Solution-Objekt ist null (0).

      - und -

    • Die integrierte Entwicklungsumgebung (Integrated Development Environment – IDE) wird dem Benutzer nicht angezeigt bzw. wird nicht von ihm gesteuert.

  • Erstellen einer neuen Instanz von Visual Studio, in der die Instanz auch in den folgenden Fällen nicht heruntergefahren wird:

    • Die Anzahl der externen Verweise auf das DTE-Objekt und das Solution-Objekt ist null (0).

    • Dem Benutzer wird die IDE angezeigt.

      - und -

    • Die IDE wird vom Benutzer gesteuert.

Die zurückgegebenen Objekte können in ihre jeweiligen Objekte umgewandelt werden, z. B. DTE2 und Solution2.

Tipp

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert. Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.

Beispiel

Um eine neue Instanz von Visual Studio zu erstellen, verwenden Sie entweder CreateObject Function (Visual Basic) oder System.Activator.CreateInstance. Beim Verwenden der CreateObject-Funktion in Visual Basic können Sie Werte vom Typ "VisualStudio.DTE.10.0." übergeben. Dies ist in den Beispielen unten veranschaulicht.

' CreateObject method 1 - VisualStudio.DTE.10.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.10.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.10.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.10.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.10.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

Im Visual Basic-Beispiel erstellen beide Anweisungen eine neue Instanz der IDE von Visual Studio. Die erste Anweisung erstellt direkt eine neue Instanz. Die zweite Anweisung hingegen erstellt eine neue Instanz durch Erstellen einer neuen Projektmappe.

Um einen Verweis auf eine vorhandene Instanz der Visual Studio-IDE abzurufen, können Sie die GetObject Function (Visual Basic) verwenden. Es stehen Ihnen folgende Möglichkeiten zur Verfügung:

Private Sub GetInstance1 ()
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction.GetObject(, _
    "VisualStudio.DTE.10.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")

Siehe auch

Konzepte

Add-In-Registrierung

Weitere Ressourcen

Erstellen von Add-Ins und Assistenten