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

업데이트: 2007년 11월

경우에 따라서는 프로그래밍 방식으로 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 함수(Visual Basic) 또는 System.Activator.CreateInstance를 사용합니다. Visual Basic에서 CreateObject 함수를 사용하는 경우 "VisualStudio.DTE.8.0" 또는 "VisualStudio.Solution.8.0."의 값을 전달할 수 있습니다. 아래 예제에서는 이와 관련된 세 가지 방법을 보여 줍니다.

' CreateObject method 1 - VisualStudio.DTE.8.0.
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    CreateNewInstance1(_applicationObject)
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.8.0", "")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
' CreateObject method 2 - VisualStudio.Solution.8.0.
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    CreateNewInstance2(_applicationObject)
End Sub

Private Sub CreateNewInstance2(ByVal dte As DTE2)
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction. _
    CreateObject("VisualStudio.Solution.8.0", "")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
' GetTypeFromProgID and CreateInstance method.
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    CreateNewInstance3(_applicationObject)
End Sub

Private Sub CreateNewInstance3(ByVal dte As DTE2)
    Dim Type As System.Type
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.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;
    CreateNewInstance3(_applicationObject);
}

private void CreateNewInstance3(DTE2 dte)
{
    System.Type Type;
    object inst;
    EnvDTE80.DTE2 dte80Obj;
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.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.8.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

Visual Basic 예제에서 두 문은 모두 Visual Studio IDE의 새 인스턴스를 만듭니다. 첫 번째 문은 새 인스턴스를 직접 만드는 반면, 두 번째 문은 새 솔루션을 만드는 방식으로 새 인스턴스를 만듭니다.

기존 Visual Studio IDE 인스턴스를 참조하려면 GetObject 함수(Visual Basic)를 사용해야 합니다. 다음 작업 중 하나를 수행할 수 있습니다.

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

참고 항목

개념

추가 기능 등록

기타 리소스

추가 기능 및 마법사 만들기