다음을 통해 공유


방법: Visual Studio 인스턴스 만들기 또는 다른 Visual Studio 인스턴스에 연결

경우에 따라서는 프로그래밍 방식으로 Visual Studio의 새 인스턴스를 만들거나 이미 실행 중인 Visual Studio 인스턴스에 연결하는 것이 유용합니다.두 개의 Visual Studio 인스턴스가 시스템에 함께 실행 중이고 둘 다 같은 솔루션을 열고 각각 솔루션 빌드와 디버그 빌드를 수행하는 경우, 이들 두 인스턴스를 구분하기 위해 추가 기능을 프로그래밍할 수 있습니다.

예를 들어, 다음과 같은 방법을 사용할 수 있습니다.

  • 파일 또는 솔루션의 경로를 기준으로 Visual Studio 인스턴스를 시작합니다.

  • 파일 또는 솔루션의 경로를 기준으로 Visual Studio의 인스턴스에 연결합니다.

  • 기존 Visual Studio 인스턴스에 파일 또는 솔루션을 로드합니다.

  • 다음과 같은 경우에는 인스턴스가 종료되면 Visual Studio의 새 인스턴스를 만듭니다.

    • DTE 개체와 Solution 개체의 외부 참조 수가 모두 0인 경우

      -및-

    • IDE(통합 개발 환경)가 사용자에게 표시되지 않거나 사용자가 이를 제어할 수 없는 경우

  • 다음과 같은 경우에는 인스턴스가 로드된 채로 남아 있더라도 Visual Studio의 새 인스턴스를 만듭니다.

    • DTE 개체와 Solution 개체의 외부 참조 수가 모두 0인 경우

    • IDE가 사용자에게 표시되는 경우

      -및-

    • 사용자가 IDE를 제어하고 있는 경우

반환된 개체는 DTE2Solution2 같이 상응하는 개체로 캐스팅될 수 있습니다.

[!참고]

표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다.이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다.설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다.자세한 내용은 Visual Studio 설정을 참조하십시오.

예제

Visual Studio의 새 인스턴스를 만들려면 CreateObject Function 또는 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를 사용해야 합니다.다음 작업 중 하나를 수행할 수 있습니다.

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

참고 항목

개념

추가 기능 등록

기타 리소스

추가 기능 및 마법사 만들기