如何:响应 Web 引用事件 (Visual Basic)
在 VSLangProj 和 VSLangProj80 中定义的环境事件特定于 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 引用相关的事件
在 Visual Basic 中创建 Visual Studio 外接程序项目。
在**“项目”菜单上,依次单击“添加引用”、“.NET”选项卡,选择第一个 VSLangProj 和 VSLangProj80,然后单击“确定”**。
在 Connect.vb 文件的顶部添加 Imports VSLangProj 和 Imports VSLangProj80。
在 Connect 类中,初始化一个变量以处理 VSLangProjWebReferencesEvents 对象。
Public Class Connect Implements IDTExtensibility2 Dim _applicationObject As DTE2 Dim _addInInstance As AddIn Public WithEvents webRefEvents As _ VSLangProj80.VSLangProjWebReferencesEvents
在此示例中,变量名为 webRefEvents。
自动化模型中的其他对象与特定于项目的其他类型的事件相关。 例如,在向 Imports 集合添加导入或从中移除导入时会引发 ImportsEvents。 BuildManagerEvents 应用于根据自定义工具的输出生成的临时程序集的相关事件。 有关 BuildManager 对象的更多信息,请参见 BuildManager 对象介绍。 有关特定于项目类型的事件的完整列表,请参见 事件对象(特定于项目的类型)。 有关通用自动化事件的列表,请参见 自动化事件对象。
将下面的方法调用添加到 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 方法的自动化模型中检索事件对象。
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 reference> 替换为实际 Web 服务的 URL。
运行此外接程序时,此步骤会导致 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 类的代码。 有关如何运行外接程序的信息,请参见如何:使用外接程序管理器控制外接程序。