HOW TO:建立和附加至其他 Visual Studio 執行個體

在某些情況下,以程式設計方式建立 Visual Studio 的新執行個體,或是附加至已經在執行中的特定 Visual Studio 執行個體將會很有用。 如果有兩個 Visual Studio 的執行個體正在系統中執行,而且開啟相同的方案,例如一個執行個體正在執行方案建置,另一個正在執行偵錯建置,您就可以為增益集 (Add-In) 設計程式,以區分這兩個執行個體。

例如,您可以:

  • 根據檔案或方案的路徑,啟動 Visual Studio 的執行個體。

  • 根據檔案或方案的路徑,附加至 Visual Studio 的執行個體。

  • 將檔案或方案載入至現有的 Visual Studio 執行個體。

  • 在下列情況下,於執行個體關閉的位置建立 Visual Studio 的新執行個體:

    • DTE 物件和 Solution 物件的外部參考數目都是 0。

      -和-

    • 整合式開發環境 (IDE) 未顯示給使用者看,或者不在使用者的控制之下。

  • 在下列情況下,於執行個體保持載入的位置建立 Visual Studio 的新執行個體:

    • DTE 物件和 Solution 物件的外部參考數目都是 0。

    • IDE 已顯示給使用者看。

      -和-

    • IDE 在使用者的控制之下。

傳回的物件可以轉換為各自的物件,例如 DTE2Solution2

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。 使用 [一般開發設定] 開發了這些程序。 若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。 如需詳細資訊,請參閱 使用設定

範例

若要建立 Visual Studio 的新執行個體,請使用 CreateObject Function (Visual Basic) 或 System.Activator.CreateInstance。 在 Visual Basic 中使用 CreateObject 函式時,可以傳遞 "VisualStudio.DTE.10.0." 的值。下列範例將會說明這些方法。

' 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;
}

在 Visual Basic 範例中,兩個陳述式都會建立 Visual Studio IDE 的新執行個體。 第一個陳述式會直接建立新的執行個體,而第二個陳述式則會透過建立新方案的方式建立新的執行個體。

若要取得 Visual Studio IDE 現有執行個體的參考,可以使用 GetObject Function (Visual Basic) 函式。 您可以執行下列任何一項作業:

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

請參閱

概念

增益集登錄

其他資源

建立增益集和精靈