Compartir a través de


Cómo: Responder a los eventos de referencias web (Visual Basic)

Actualización: noviembre 2007

Los eventos de entorno definidos en VSLangProj y VSLangProj80 son específicos de los proyectos de Visual C#, Visual Basic y Visual J#. VSLangProjWebReferencesEvents es un nuevo tipo en Visual Studio 2005. Se produce cuando se agrega o de quita una referencia web en un proyecto de Visual Basic, Visual C# o Visual J#, o cuando se modifican las propiedades de una referencia web en un proyecto de Visual Basic, Visual C# o Visual J#.

Este ejemplo utiliza Visual Basic para conectar métodos de control de eventos para un proyecto específico por medio de la propiedad VSLangProjWebReferencesEvents.

Nota:

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configuración activa o la edición. Estos procedimientos se han desarrollado con la Configuración de desarrollo general activa. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para controlar eventos relacionados con referencias Web utilizando Visual Basic

  1. Cree un proyecto de complemento de Visual Studio en Visual Basic.

  2. En el Menú Proyecto, haga clic en Agregar referencia, haga clic en la ficha de .NET, seleccione el primer VSLangProj y VSLangProj80 y haga clic en Aceptar.

  3. Agregue Imports VSLangProj e Imports VSLangProj80 al principio del archivo Connect.vb.

  4. En la clase Connect, inicialice una variable para controlar el objeto VSLangProjWebReferencesEvents.

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

    En este ejemplo, la variable se llama webRefEvents.

    Otros objetos del modelo de automatización están relacionados con otros tipos de eventos específicos del proyecto. Por ejemplo, ImportsEvents se provoca cuando se agrega o se quita una importación en una colección Imports. BuildManagerEvents se aplica a eventos relacionados con ensamblados temporales generados a partir de resultados de herramientas personalizadas. Para obtener más información sobre el objeto BuildManager, vea Introducción al objeto BuildManager. Para ver una lista completa de los eventos específicos de los tipos de proyecto, vea Objetos de evento (específicos para tipos de proyectos). Para obtener una lista de eventos de automatización generales, vea Objetos de eventos de automatización.

  5. Agregue la llamada siguiente al método OnConnection.

    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. Agregue la declaración de método WebReferenceEventsSample directamente debajo del método OnConnection.

    Sub WebReferenceEventsSample(ByVal dte As DTE2)
    
    End Sub
    
  7. Agregue las declaraciones siguientes a la parte superior del método WebReferenceEventsSample.

    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)
    

    La declaración proj = soln.Projects.Item(1) requiere que un proyecto esté abierto en el entorno de desarrollo integrado (IDE) de Visual Studio cuando se ejecute este ejemplo. En particular, el proyecto debe ser un proyecto de Visual Basic, Visual C# o Visual J#, porque el objeto VSLangProjWebReferencesEvents es específico a esos tipos de proyecto.

  8. Convierta el proyecto en un objeto VSProject2 agregando el código siguiente al método WebReferenceEventsSample.

    ' Cast the project to a VSProject2.
    vsproj = CType(proj.Object, VSProject2)
    
  9. También en el método WebReferenceEventsSample, recupere los objetos de evento del modelo de automatización.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
    
  10. Conecte los controladores de eventos.

    AddHandler webRefEvents.OnAfterWebReferenceAdded, _
     AddressOf WebReferenceAdded
    AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _
     AddressOf WebReferenceRemoved
    AddHandler webRefEvents.OnWebReferenceChanged, _
     AddressOf WebReferenceChanged
    
  11. Agregue una referencia Web al proyecto.

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

    Para agregar al proyecto mediante programación una referencia a un servicio Web, debe reemplazar en el código el texto del marcador, <web reference>, por la dirección URL de un servicio Web real.

    Este paso hace que se desencadene el evento OnAfterWebReferenceAdded cuando se ejecuta este complemento.

  12. Agregue procedimientos para cada evento relacionado con el objeto de evento.

    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. Finalmente, para evitar que Visual Studio ralentice el sistema continuando la supervisión de eventos relacionados con ventanas después de cerrar el complemento, deshabilite el control de eventos. En Visual Basic, esto se hace estableciendo el controlador de eventos en Nothing.

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

    El código completo se muestra en la sección Ejemplo de este tema.

  14. Para generar el complemento, haga clic en Generar solución en el menú Generar.

  15. Abra un proyecto de Visual C#, Visual J# o Visual Basic en el entorno de desarrollo integrado (IDE) de Visual Studio.

  16. En el menú Herramientas, haga clic en Administrador de complementos y seleccione el complemento del cuadro de diálogo Administrador de complementos. Haga clic en Aceptar para ejecutar el complemento.

Para probar el control de eventos de VSLangProjWebReferencesEvents

  1. El evento OnAfterWebReferenceAdded se desencadena una vez cuando se ejecuta el complemento, porque el ejemplo agrega mediante programación una referencia a un servicio Web.

  2. Para probar el evento OnWebReferenceChanged:

    • Expanda la carpeta Referencias Web en el Explorador de soluciones.

    • Seleccione el servicio Web y haga clic en él con el botón secundario del mouse.

    • Seleccione Propiedades en el menú desplegable.

    • En la ventana Propiedades, cambie el comportamiento de la dirección URL de dinámico a estático seleccionando Estático en el cuadro combinado Comportamiento de dirección URL.

  3. Para probar el evento OnBeforeWebReferenceRemoved:

    • Seleccione el servicio Web y haga clic en él con el botón secundario del mouse.

    • Seleccione Eliminar en el menú desplegable.

Ejemplo

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

Compilar el código

Para compilar este código, cree un nuevo proyecto de complemento de Visual Studio en Visual Basic y reemplace el código de la clase Connect por el código del ejemplo. Para obtener información sobre cómo ejecutar un complemento, vea Cómo: Controlar complementos con el Administrador de complementos.

Vea también

Tareas

Cómo: Responder a los eventos de referencias web (Visual C#)

Otros recursos

Responder a eventos de automatización

Responder a eventos (Proyectos de Visual Basic y Visual C#)