如何:回應 Web 參考事件 (Visual Basic)
在 VSLangProj 和 VSLangProj80 中定義的環境事件是 Visual C# 和 Visual Basic 專案特有的事件。 VSLangProjWebReferencesEvents 是 Visual Studio 中的新型別。 在將 Web 參考加入至 Visual Basic 或 Visual C# 專案,或從這些專案中移除 Web 參考,或當 Web 參考的屬性在 Visual Basic 或 Visual C# 專案中進行修改時,便會引發此事件。
這個範例會使用 VSLangProjWebReferencesEvents 屬性,利用 Visual Basic 連接特定專案的事件處理方法。
注意事項 |
---|
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置:您所擁有的 Visual Studio 版本和使用的設定決定了這些項目。如需詳細資訊,請參閱Visual Studio 中的自訂開發設定。 |
若要使用 Visual Basic 處理與 Web 參考相關的事件
在 Visual Basic 中建立 Visual Studio 增益集專案。
在 [專案] 功能表上按一下 [加入參考],再按一下 [.NET] 索引標籤,選取第一個 [VSLangProj] 和 [VSLangProj80],然後按一下 [確定]。
將 Imports VSLangProj 和 Imports VSLangProj80 加入至 Connect.vb 檔案的最上方。
在 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 事件物件。
將下列方法呼叫加入至 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
直接在 OnConnection 方法的下方加入 WebReferenceEventsSample 方法宣告。
Sub WebReferenceEventsSample(ByVal dte As DTE2) End Sub
將下列宣告加入至 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 物件是這些專案類型所專用的。
將下列程式碼加入至 WebReferenceEventsSample 方法,藉此將專案轉換成 VSProject2 物件。
' Cast the project to a VSProject2. vsproj = CType(proj.Object, VSProject2)
同樣在 WebReferenceEventsSample 方法中,從 Automation 模型中擷取事件物件。
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents
連接事件處理常式。
AddHandler webRefEvents.OnAfterWebReferenceAdded, _ AddressOf WebReferenceAdded AddHandler webRefEvents.OnBeforeWebReferenceRemoved, _ AddressOf WebReferenceRemoved AddHandler webRefEvents.OnWebReferenceChanged, _ AddressOf WebReferenceChanged
在專案加入一個 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 事件。
為事件物件的每個相關事件加入程序。
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
最後,為了不讓 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
完整的程式碼會列在本主題的<範例>一節中。
若要建置增益集,請按一下 [建置] 功能表上的 [建置方案]。
在 Visual Studio 整合式開發環境 (IDE) 中開啟 Visual C# 或 Visual Basic 專案。
按一下 [工具] 功能表上的 [增益集管理員],然後從 [增益集管理員] 對話方塊中選取增益集。 按一下 [確定],執行您的增益集。
若要測試 VSLangProjWebReferencesEvents 事件處理
當您執行增益集時,會引發一次 OnAfterWebReferenceAdded 事件,因為範例是以程式設計方式將參考加入至 Web 服務。
若要測試 OnWebReferenceChanged 事件:
展開 [方案總管] 中的 [Web 參考] 資料夾。
選取 Web 服務並以滑鼠右鍵按一下該服務。
從下拉式功能表中選取 [屬性]。
在 [屬性] 視窗中,從 [URL 行為] 下拉式方塊選取 [靜態],將 URL 行為從動態變更為靜態。
若要測試 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 類別的程式碼。 如需如何執行增益集的詳細資訊,請參閱 如何:使用增益集管理員來控制增益集。