HOW TO:回應 Web 參考事件 (Visual Basic)

VSLangProjVSLangProj80 中定義的環境事件是 Visual C# 和 Visual Basic 專案特有的事件。 VSLangProjWebReferencesEvents 是 Visual Studio 2005 中的新型別。 在將 Web 參考加入至 Visual Basic 或 Visual C# 專案,或從這些專案中移除 Web 參考,或當 Web 參考的屬性在 Visual Basic 或 Visual C# 專案中進行修改時,便會引發此事件。

這個範例會使用 VSLangProjWebReferencesEvents 屬性,利用 Visual Basic 連接特定專案的事件處理方法。

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。 使用 [一般開發設定] 開發了這些程序。 若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。 如需詳細資訊,請參閱 使用設定

若要使用 Visual Basic 處理與 Web 參考相關的事件

  1. 在 Visual Basic 中建立 Visual Studio 增益集專案。

  2. 在 [專案] 功能表上按一下 [加入參考],再按一下 [.NET] 索引標籤,選取第一個 [VSLangProj] 和 [VSLangProj80],然後按一下 [確定]。

  3. 將 Imports VSLangProj 和 Imports VSLangProj80 加入至 Connect.vb 檔案的最上方。

  4. 在 Connect 類別中初始化變數,以處理 VSLangProjWebReferencesEvents 物件。

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

    在這個範例中,變數的名稱為 webRefEvents。

    Automation 模型中的其他物件則是與特定專案中其他類型的事件相關。 例如,在 Imports 集合中加入或移除 Import 物件時,會引發 ImportsEvents 事件。 BuildManagerEvents 適用於從自訂工具輸出所建置之暫存組件的相關事件。 如需 BuildManager 物件的詳細資訊,請參閱 BuildManager 物件簡介; 如需因專案類型而異之所有事件的完整清單,請參閱事件物件 (因各種專案類型而異); 如需一般 Automation 事件的清單,則請參閱 Automation 事件物件

  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 方法中,從 Automation 模型中擷取事件物件。

    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 服務的 URL 取代程式碼中的預留位置文字 <web reference>。

    當您執行這個增益集時,此步驟會導致引發 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 類別的程式碼。 如需如何執行增益集的詳細資訊,請參閱 HOW TO:使用增益集管理員來控制增益集

請參閱

工作

HOW TO:回應 Web 參考事件 (Visual C#)

其他資源

回應 Automation 事件

回應事件 (Visual Basic 和 Visual C# 專案)