Freigeben über


Gewusst wie: Reagieren auf Webverweisereignisse (Visual Basic)

Aktualisiert: November 2007

Die in VSLangProj und VSLangProj80 definierten Umgebungsereignisse sind für Visual C#-, Visual Basic- und Visual J#-Projekte spezifisch. VSLangProjWebReferencesEvents ist ein neuer Typ in Visual Studio 2005. Er wird ausgelöst, wenn ein Webverweis in einem Visual Basic-, Visual C#- oder Visual J#-Projekt hinzugefügt oder entfernt wird oder wenn die Eigenschaften eines Webverweises in einem Visual Basic-, Visual C#- oder Visual J#-Projekt geändert werden.

In diesem Beispiel wird Visual Basic verwendet, um Ereignisbehandlungsmethoden für ein bestimmtes Projekt mithilfe der VSLangProjWebReferencesEvents-Eigenschaft zu verbinden.

Hinweis:

Die angezeigten Dialogfelder und Menübefehle können je nach den aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen abweichen. 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 Visual Studio-Einstellungen.

So behandeln Sie mit Webverweisen verbundene Ereignisse in Visual Basic

  1. Erstellen Sie in Visual Basic ein Visual Studio-Add-In-Projekt.

  2. Klicken Sie im Menü Projekt auf Verweis hinzufügen, klicken Sie auf die Registerkarte .NET, wählen Sie das erste VSLangProj und VSLangProj80 aus, und klicken Sie dann auf OK.

  3. Fügen Sie am Anfang der Datei Connect.vb Imports VSLangProj und Imports VSLangProj80 ein.

  4. Initialisieren Sie in der Connect-Klasse eine Variable zum Behandeln des VSLangProjWebReferencesEvents-Objekts.

    Public Class Connect
        Implements IDTExtensibility2
        Dim _applicationObject As DTE2
        Dim _addInInstance As AddIn
        Public WithEvents webRefEvents As _    VSLangProj80.VSLangProjWebReferencesEvents
    

    In diesem Beispiel hat die Variable den Namen webRefEvents.

    Andere Objekte im Automatisierungsmodell beziehen sich auf andere projektspezifische Ereignistypen. So wird z. B. ImportsEvents ausgelöst, wenn Sie in einer Imports-Auflistung einen Importvorgang hinzufügen oder entfernen. BuildManagerEvents gilt für Ereignisse in Verbindung mit temporären Assemblys, die aus Ausgaben benutzerdefinierter Tools erstellt wurden. Weitere Informationen über das BuildManager-Objekt finden Sie unter Einführung in das BuildManager-Objekt. Eine vollständige Liste der Ereignisse, die für Projekttypen gelten, finden Sie unter Ereignisobjekte (abgestimmt auf Projekttypen). Eine Liste allgemeiner Automatisierungsereignisse finden Sie unter Ereignisobjekte für die Automatisierung.

  5. Fügen Sie der OnConnection-Methode den folgenden Methodenaufruf hinzu.

    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)
        WebReferenceEventsSample(_applicationObject)
    End Sub
    
  6. Fügen Sie direkt unterhalb der OnConnection-Methode die WebReferenceEventsSample-Methodendeklaration hinzu.

    Sub WebReferenceEventsSample(ByVal dte As DTE2)
    
    End Sub
    
  7. Fügen Sie am Anfang der WebReferenceEventsSample-Methode die folgenden Deklarationen hinzu.

    Dim soln As Solution2 = CType(_applicationObject.Solution, Solution2)
    Dim proj As Project
    Dim vsproj As VSProject2
    Dim webServiceRef As String
    proj = soln.Projects.Item(1)
    

    Die Deklaration proj = soln.Projects.Item(1) erfordert, dass ein Projekt in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio geöffnet ist, wenn Sie dieses Beispiel ausführen. Hauptsächlich muss es sich bei dem Projekt um ein Visual Basic-, Visual C#- oder Visual J#-Projekt handeln, da das VSLangProjWebReferencesEvents-Objekt für diese Projekttypen spezifisch ist.

  8. Wandeln Sie das Projekt in ein VSProject2-Objekt um, indem Sie der WebReferenceEventsSample-Methode den folgenden Code hinzufügen.

    ' Cast the project to a VSProject2.
    vsproj = CType(proj.Object, VSProject2)
    
  9. Rufen Sie in der WebReferenceEventsSample-Methode zudem die Ereignisobjekte vom Automatisierungsmodell ab.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
    
  10. Verbinden Sie die Ereignishandler.

    AddHandler webRefEvents.OnAfterWebReferenceAdded, _
     AddressOf WebReferenceAdded
    AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _
     AddressOf WebReferenceRemoved
    AddHandler webRefEvents.OnWebReferenceChanged, _
     AddressOf WebReferenceChanged
    
  11. Fügen Sie einen Webverweis zum Projekt hinzu.

    ' Create a Web references folder.
    MsgBox("Creating a Web references folder.", MsgBoxStyle.Information)
    vsproj.CreateWebReferencesFolder()
    ' Add a Web reference to the folder.
    ' Replace the "<web reference>" with an actual Web service URL.
    MsgBox("Adding a Web reference.", MsgBoxStyle.Information)
    webServiceRef = "<web reference>"
    vsproj.AddWebReference(webServiceRef)
    

    Um dem Projekt programmgesteuert einen Webdienstverweis hinzuzufügen, ersetzen Sie den im Code enthaltenen Platzhaltertext <web reference> durch den URL eines tatsächlichen Webdienstes.

    Dieser Schritt bewirkt, dass das OnAfterWebReferenceAdded-Ereignis ausgelöst wird, sobald Sie dieses Add-In ausführen.

  12. Fügen Sie Verfahren für jedes auf das Ereignisobjekt bezogene Ereignis hinzu.

    Sub WebReferenceRemoved(ByVal removedRef As Object)
        MsgBox("A Web reference was removed.")
    End Sub
    Sub WebReferenceChanged(ByVal changedRef As Object)
        MsgBox("A Web reference was changed.")
    End Sub
    Sub WebReferenceAdded(ByVal addedRef As Object)
        MsgBox("A Web reference was added.")
    End Sub
    
  13. Um schließlich zu verhindern, dass Visual Studio nach Schließen des Add-Ins durch die fortdauernde Überwachung fensterbezogener Ereignisse die Systemleistung beeinträchtigt, deaktivieren Sie die Ereignisbehandlung. Dazu legen Sie in Visual Basic den Ereignishandler auf Nothing fest.

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

    Der vollständige Code wird im Beispielabschnitt dieses Themas aufgelistet.

  14. Um das Add-In zu erstellen, klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  15. Öffnen Sie in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio ein Visual C#-, Visual J#- oder Visual Basic-Projekt.

  16. Klicken Sie im Menü Extras auf Add-In-Manager, und wählen Sie im Dialogfeld Add-In-Manager das Add-In aus. Klicken Sie auf OK, um das Add-In auszuführen.

So testen Sie die VSLangProjWebReferencesEvents-Ereignisbehandlung

  1. Das OnAfterWebReferenceAdded-Ereignis wird einmal ausgelöst, sobald Sie das Add-In ausführen, da ein Verweis auf einen Webdienst im Beispiel programmgesteuert hinzugefügt wird.

  2. So testen Sie das OnWebReferenceChanged-Ereignis:

    • Erweitern Sie im Projektmappen-Explorer den Ordner Webverweise.

    • Wählen Sie den Webdienst aus, und klicken Sie mit der rechten Maustaste darauf.

    • Wählen Sie im Dropdownmenü den Befehl Eigenschaften aus.

    • Ändern Sie im Eigenschaftenfenster das URL-Verhalten von dynamisch in statisch, indem Sie im Kombinationsfeld URL-Verhalten die Option Statisch auswählen.

  3. So testen Sie das OnBeforeWebReferenceRemoved-Ereignis:

    • Wählen Sie den Webdienst aus, und klicken Sie mit der rechten Maustaste darauf.

    • Wählen Sie im Dropdownmenü den Befehl Löschen aus.

Beispiel

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

Public Class Connect
    Implements IDTExtensibility2
    Dim _applicationObject As DTE2
    Dim _addInInstance As AddIn
    Public WithEvents webRefEvents As _
    VSLangProj80.VSLangProjWebReferencesEvents
    Public Sub New()
    End Sub
    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)
        WebReferenceEventsSample(_applicationObject)
    End Sub
    Sub WebReferenceEventsSample(ByVal dte As DTE2)
        Try
            Dim soln As Solution2 = CType(_applicationObject.Solution _
            , Solution2)
            Dim proj As Project
            Dim vsproj As VSProject2
            Dim webServiceRef As String
            proj = soln.Projects.Item(1)
            ' Cast the project to a VSProject2.
            vsproj = CType(proj.Object, VSProject2)
            webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
            AddHandler webRefEvents.OnAfterWebReferenceAdded, _
            AddressOf WebReferenceAdded
            AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _
            AddressOf WebReferenceRemoved
            AddHandler webRefEvents.OnWebReferenceChanged, _
            AddressOf WebReferenceChanged
            ' Create a Web references folder.
            MsgBox("Creating a Web references folder." _
            , MsgBoxStyle.Information)
            vsproj.CreateWebReferencesFolder()
            ' Add a Web reference to the folder.
            ' Replace the place holder <web reference> with
            ' a Web service URL.
            MsgBox("Adding a Web reference.", MsgBoxStyle.Information)
            webServiceRef = "<web reference>"
            vsproj.AddWebReference(webServiceRef)
        Catch ex As System.Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
    Sub WebReferenceRemoved(ByVal removedRef As Object)
        MsgBox("A Web reference was removed.")
    End Sub
    Sub WebReferenceChanged(ByVal changedRef As Object)
        MsgBox("A Web reference was changed.")
    End Sub
    Sub WebReferenceAdded(ByVal addedRef As Object)
        MsgBox("A Web reference was added.")
    End Sub
    Public Sub OnDisconnection(ByVal disconnectMode As _
    ext_DisconnectMode, ByRef custom As Array) Implements _
    IDTExtensibility2.OnDisconnection
        ' Turns off Web reference event handling when the 
        ' add-in shuts down.
        webRefEvents = Nothing
    End Sub
    Public Sub OnAddInsUpdate(ByRef custom As Array) _
    Implements IDTExtensibility2.OnAddInsUpdate
    End Sub
    Public Sub OnStartupComplete(ByRef custom As Array) _
    Implements IDTExtensibility2.OnStartupComplete
    End Sub
    Public Sub OnBeginShutdown(ByRef custom As Array) _
    Implements IDTExtensibility2.OnBeginShutdown
    End Sub
End Class

Kompilieren des Codes

Um diesen Code zu kompilieren, erstellen Sie in Visual Basic ein neues Visual Studio-Add-In-Projekt und ersetzen den Code der Connect-Klasse durch den Code im Beispiel. Informationen zum Ausführen eines Add-Ins finden Sie unter Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager.

Siehe auch

Aufgaben

Gewusst wie: Reagieren auf Webverweisereignisse (Visual C#)

Weitere Ressourcen

Reagieren auf Automatisierungsereignisse

Reagieren auf Ereignisse (Visual Basic- und Visual C#-Projekte)