방법: 특정 프로젝트의 이벤트에 응답(Visual Basic)

업데이트: 2007년 11월

자동화 모델에는 Visual Studio IDE(통합 개발 환경)의 환경 이벤트에 대한 응답으로 사용할 수 있는 개체가 포함되어 있습니다. VSLangProjVSLangProj80에 정의되어 있는 환경 이벤트는 Visual C#, Visual Basic 및 Visual J# 프로젝트에 적용됩니다. 예를 들어, Imports 컬렉션에서 가져오기를 추가 또는 제거하면 ImportsEvents가 발생합니다.

이 예제에서는 프로젝트 형식에 적용되는 ReferencesEvents 이벤트 처리기를 Visual Basic을 사용하여 추가 기능 프로젝트에 추가합니다. ReferencesEvents는 Visual C#, Visual Basic 또는 Visual J# 프로젝트에서 참조를 변경, 추가 또는 제거하는 경우에 발생합니다.

참고:

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

Visual Basic을 사용하여 참조 관련 이벤트를 처리하려면

  1. Visual Basic에서 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. Connect.vb 파일의 맨 위에 Imports VSLangProj를 추가합니다.

  3. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 첫 번째 VSLangProj를 선택하고 확인을 클릭합니다.

  4. Connect 클래스에서 ReferencesEvents 개체를 처리하기 위한 변수와 OutputWindowPane을 처리하기 위한 변수를 각각 초기화합니다.

    Public Class Connect
        Implements IDTExtensibility2
        Dim _applicationObject As DTE2
        Dim _addInInstance As AddIn
        ' Handle Reference events.
        Public WithEvents refEvents As VSLangProj.ReferencesEvents
        Private outputWinPane As OutputWindowPane
    

    이 예제에서 변수 이름은 refEvents입니다.

    자동화 모델의 다른 개체는 프로젝트에 적용되는 다른 이벤트 형식과 연결됩니다. 예를 들어, Imports 컬렉션에서 가져오기를 추가 또는 제거하면 ImportsEvents가 발생합니다. BuildManagerEvents는 사용자 지정 도구의 출력을 사용하여 빌드한 임시 어셈블리와 관련된 이벤트에 적용됩니다. BuildManager 개체에 대한 자세한 내용은 BuildManager 개체 소개를 참조하십시오. 프로젝트 형식과 관련된 이벤트의 전체 목록은 이벤트 개체(프로젝트 형식별)를 참조하십시오. 일반 자동화 이벤트의 목록은 자동화 이벤트 개체를 참조하십시오.

  5. OnConnection 메서드에서 이벤트를 가로채는 변수를 초기화합니다. 이 예제에서 변수 이름은 events입니다.

        Dim events As EnvDTE80.Events2
        events = CType(_applicationObject.Events, Events2)
    
  6. OnConnection 메서드에서 OutputWindow 변수를 초기화합니다.

        Dim outputWindow As OutputWindow
        outputWindow = CType(_applicationObject.Windows.Item _
        (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
        outputWinPane = outputWindow.OutputWindowPanes.Add_
        ("Reference Event Information ")
    
  7. 또한 OnConnection 메서드에서 자동화 모델의 이벤트 개체를 검색합니다.

    refEvents = CType(events.GetObject("CSharpReferencesEvents"),_
     ReferencesEvents)
    

    개체 변수 선언에 WithEvents 처리기가 사용되므로 Visual Studio는 메서드 처리기를 자동으로 연결합니다.

    이 예제에서 ReferencesEvents는 Visual C# 프로젝트에 적용됩니다. Visual Basic 또는 Visual J# 이벤트와 관련된 이벤트에 응답하려면 문자열 CSharpReferencesEvents를 각각 VBReferencesEvents 또는 VJSharpReferencesEvents로 바꿉니다. 각기 다른 형식의 프로젝트에 해당하는 이벤트에 사용할 문자열을 결정하는 방법에 대한 자세한 내용은 이벤트 개체(프로젝트 형식별)를 참조하십시오.

  8. 이벤트 개체와 관련된 각 이벤트에 대한 프로시저를 추가합니다. 예를 들어, 참조를 추가할 때 발생하는 이벤트를 처리하려면 다음 코드를 사용합니다.

    Sub ReferenceAdded(ByVal addedRef As VSLangProj.Reference)_
        Handles refEvents.ReferenceAdded
        outputWinPane.OutputString_
        ("ReferencesEvents.ReferenceAdded" & ControlChars.Lf)
        outputWinPane.OutputString("The reference to " _
        & addedRef.Name & " was added." & ControlChars.Lf)
    End Sub
    

    ReferencesEvents의 경우 아래 예제의 전체 목록에 나와 있는 것처럼 ReferenceAdded, ReferenceRemoved, ReferenceChanged에 대해 정의된 이벤트가 있어야 합니다.

  9. 마지막으로, 추가 기능을 닫은 후에도 Visual Studio에서 창 관련 이벤트를 계속 모니터링하면 시스템 속도가 느려질 수 있으므로 이벤트 처리를 사용하지 않도록 설정합니다. Visual Basic에서 이 작업은 이벤트 처리기를 Nothing으로 설정하여 수행됩니다.

    Public Sub OnDisconnection(ByVal RemoveMode As_
     Extensibility.ext_DisconnectMode, ByRef custom As System.Array)_
     Implements Extensibility.IDTExtensibility2.OnDisconnection
        refEvents = Nothing
    End Sub
    

    이렇게 하면 추가 기능이 종료될 경우만이 아니라 추가 기능이 여전히 실행 중인 상태에서 IDE가 종료될 경우에도 이벤트 처리가 해제됩니다. IDE가 종료될 때에는 실행 중인 모든 추가 기능이 먼저 자동으로 종료됩니다.

예제

다음은 Visual Studio에서 Visual C# 참조 이벤트를 가로채고 처리하는 방법을 보여 주는 기본 Visual Studio 추가 기능 예제입니다. 참조 이벤트가 발생할 때마다 알림 메시지가 출력 창으로 전달됩니다.

Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj

Public Class Connect
    Implements IDTExtensibility2
    Dim _applicationObject As DTE2
    Dim _addInInstance As AddIn
    ' Handle Reference events.
    Public WithEvents refEvents As VSLangProj.ReferencesEvents
    Private outputWinPane As OutputWindowPane
Public Sub OnBeginShutdown(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnBeginShutdown
End Sub

Public Sub OnAddInsUpdate(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
End Sub

Public Sub OnStartupComplete(ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnStartupComplete
End Sub

Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) _
 Implements Extensibility.IDTExtensibility2.OnDisconnection
    ' Turns off reference event handling when the add-in shuts down.
    refEvents = Nothing
End Sub

Public Sub OnConnection(ByVal application As Object, _
 ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef _
 custom As System.Array) Implements _
 Extensibility.IDTExtensibility2.OnConnection

    _applicationObject = CType(application, EnvDTE80.DTE2)
    _addInInstance = CType(addInInst, EnvDTE.AddIn)

    Dim events As EnvDTE80.Events2
    events = CType(_applicationObject.Events, Events2)
    ' Send event messages to the Output window.
    Dim outputWindow As OutputWindow
    outputWindow = CType(_applicationObject.Windows.Item _
    (Constants.vsWindowKindOutput).Object, EnvDTE.OutputWindow)
    outputWinPane = outputWindow.OutputWindowPanes.Add _
    ("Reference Event Information ")

    ' Retrieve the event objects from the automation model.
    ' Visual Basic automatically connects the method handler since 
    ' the object variable declaration uses the 'WithEvents' handler.
    refEvents = CType(events.GetObject("CSharpReferencesEvents"), _
    ReferencesEvents)
End Sub
    ' Handle all of the various reference-related events.
    Sub ReferenceRemoved(ByVal removedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceRemoved
    outputWinPane.OutputString("ReferencesEvents.ReferenceRemoved" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & removedRef.Name _
    & " was removed." & ControlChars.Lf)
End Sub

Sub ReferenceChanged(ByVal changedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceChanged
    outputWinPane.OutputString("ReferencesEvents.ReferenceChanged" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & changedRef.Name _
    & " was changed." & ControlChars.Lf)
End Sub
Sub ReferenceAdded(ByVal addedRef As VSLangProj.Reference) _
    Handles refEvents.ReferenceAdded
    outputWinPane.OutputString("ReferencesEvents.ReferenceAdded" _
    & ControlChars.Lf)
    outputWinPane.OutputString("The reference to " & addedRef.Name _
    & " was added." & ControlChars.Lf)
End Sub

End Class

코드 컴파일

이 코드를 컴파일하려면 Visual Basic에서 새 Visual Studio 추가 기능 프로젝트를 만들고 Connect 클래스의 코드를 예제에 있는 코드로 변경합니다. 추가 기능을 실행하는 방법에 대한 내용은 방법: 추가 기능 관리자를 사용하여 추가 기능 제어를 참조하십시오.

참고 항목

작업

방법: 특정 프로젝트의 이벤트에 응답(Visual C#)

참조

Imports 문(.NET 네임스페이스 및 형식)

기타 리소스

자동화 이벤트에 응답

이벤트에 응답(Visual Basic 및 Visual C# 프로젝트)