如何:响应 Web 引用事件 (Visual Basic)

VSLangProjVSLangProj80 中定义的环境事件特定于 Visual C# 和 Visual Basic 项目。 VSLangProjWebReferencesEvents 是 Visual Studio 中的新类型。 在 Visual Basic 或 Visual C# 项目中添加或删除 Web 引用,或在 Visual Basic 或 Visual C# 项目中修改 Web 引用的属性时,便会引发它。

此示例通过 Visual Basic 来使用 VSLangProjWebReferencesEvents 属性为特定项目连接事件处理方法。

备注

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。您安装的 Visual Studio 版本以及使用的设置决定了这些元素。有关详细信息,请参阅在 Visual Studio 中自定义开发设置

使用 Visual Basic 处理与 Web 引用相关的事件

  1. 在 Visual Basic 中创建 Visual Studio 外接程序项目。

  2. 在**“项目”菜单上,依次单击“添加引用”“.NET”选项卡,选择第一个 VSLangProj 和 VSLangProj80,然后单击“确定”**。

  3. 在 Connect.vb 文件的顶部添加 Imports VSLangProj 和 Imports VSLangProj80。

  4. 在 Connect 类中,初始化一个变量以处理 VSLangProjWebReferencesEvents 对象。

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

    在此示例中,变量名为 webRefEvents。

    自动化模型中的其他对象与特定于项目的其他类型的事件相关。 例如,在向 Imports 集合添加导入或从中移除导入时会引发 ImportsEventsBuildManagerEvents 应用于根据自定义工具的输出生成的临时程序集的相关事件。 有关 BuildManager 对象的更多信息,请参见 BuildManager 对象介绍。 有关特定于项目类型的事件的完整列表,请参见 事件对象(特定于项目的类型)。 有关通用自动化事件的列表,请参见 自动化事件对象

  5. 将下面的方法调用添加到 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. 在 OnConnection 方法下面直接添加 WebReferenceEventsSample 方法声明。

    Sub WebReferenceEventsSample(ByVal dte As DTE2)
    
    End Sub
    
  7. 向 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)
    

    proj = soln.Projects.Item(1) 声明要求运行此示例时在 Visual Studio 集成开发环境 (IDE) 中打开项目。 特别要求项目必须是 Visual Basic 或 Visual C# 项目,因为 VSLangProjWebReferencesEvents 对象特定于这些项目类型。

  8. 向 WebReferenceEventsSample 方法添加以下代码,从而将项目强制转换为 VSProject2 对象。

    ' Cast the project to a VSProject2.
    vsproj = CType(proj.Object, VSProject2)
    
  9. 此外,在 WebReferenceEventsSample 方法的自动化模型中检索事件对象。

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
    
  10. 连接事件处理程序。

    AddHandler webRefEvents.OnAfterWebReferenceAdded, _
     AddressOf WebReferenceAdded
    AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _
     AddressOf WebReferenceRemoved
    AddHandler webRefEvents.OnWebReferenceChanged, _
     AddressOf WebReferenceChanged
    
  11. 向项目中添加 Web 引用。

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

    若要以编程方式向项目中添加 Web 服务引用,必须将代码中的占位符文本 <web reference> 替换为实际 Web 服务的 URL。

    运行此外接程序时,此步骤会导致 OnAfterWebReferenceAdded 事件。

  12. 为每个与事件对象相关的事件添加过程。

    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. 最后,为了防止在关闭外接程序后 Visual Studio 继续监视与窗口相关的事件而减慢系统的运行速度,请禁用事件处理。 在 Visual Basic 中,这可以通过将事件处理程序设置为 Nothing 来实现。

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

    本主题的“示例”部分给出了完整的代码。

  14. 若要生成外接程序,请单击**“生成”菜单上的“生成解决方案”**。

  15. 在 Visual Studio 集成开发环境 (IDE) 中打开一个 Visual C# 或 Visual Basic 项目。

  16. 在**“工具”菜单上,单击“外接程序管理器”,并从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。

测试 VSLangProjWebReferencesEvents 事件处理

  1. 一旦运行外接程序,就会激发 OnAfterWebReferenceAdded 事件,因为该示例以编程方式添加了对 Web 服务的引用。

  2. 测试 OnWebReferenceChanged 事件:

    • 在**“解决方案资源管理器”中,展开“Web 引用”**文件夹。

    • 选择 Web 服务,然后右击。

    • 从下拉菜单中选择**“属性”**。

    • 在“属性”窗口中,通过从“URL 行为”组合框中选择“静态”,从而将 URL 行为从动态改为静态。

  3. 测试 OnBeforeWebReferenceRemoved 事件:

    • 选择 Web 服务,然后右击。

    • 从下拉菜单中选择**“删除”**。

示例

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

编译代码

若要编译此代码,请在 Visual Basic 中新建 Visual Studio 外接程序项目,然后用该示例中的代码替换 Connect 类的代码。 有关如何运行外接程序的信息,请参见如何:使用外接程序管理器控制外接程序

请参见

任务

如何:响应 Web 引用事件 (Visual C#)

其他资源

响应自动化事件

响应事件(Visual Basic 和 Visual C# 项目)