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
Cree un proyecto de complemento de Visual Studio en Visual Basic.
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.
Agregue Imports VSLangProj e Imports VSLangProj80 al principio del archivo Connect.vb.
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.
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
Agregue la declaración de método WebReferenceEventsSample directamente debajo del método OnConnection.
Sub WebReferenceEventsSample(ByVal dte As DTE2) End Sub
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.
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)
También en el método WebReferenceEventsSample, recupere los objetos de evento del modelo de automatización.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
Conecte los controladores de eventos.
AddHandler webRefEvents.OnAfterWebReferenceAdded, _ AddressOf WebReferenceAdded AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _ AddressOf WebReferenceRemoved AddHandler webRefEvents.OnWebReferenceChanged, _ AddressOf WebReferenceChanged
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.
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
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.
Para generar el complemento, haga clic en Generar solución en el menú Generar.
Abra un proyecto de Visual C#, Visual J# o Visual Basic en el entorno de desarrollo integrado (IDE) de Visual Studio.
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
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.
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.
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#)