Поделиться через


Практическое руководство. Отклик на события веб-ссылок (Visual Basic)

События среды, определенные в пространствах имен VSLangProj и VSLangProj80, относятся только к проектам Visual C# и Visual Basic. В VSLangProjWebReferencesEvents представлен новый тип — Visual Studio 2005. Это событие возникает при добавлении или удалении веб-ссылки из проектов и Visual C# либо при изменении свойств веб-ссылки в проектах Visual Basic и Visual C#.

В данном примере показано соединение методов обработки событий для конкретного проекта с помощью свойства VSLangProjWebReferencesEvents в Visual Basic.

Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.

Обработка событий, связанных с веб-ссылками, с помощью языка Visual Basic

  1. Создайте проект надстройки Visual Studio в Visual Basic.

  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.

    Другие объекты в модели автоматизации относятся к другим типам событий проекта. Например, ImportsEvents инициируется при добавлении или удалении импорта из коллекции Imports. BuildManagerEvents применяется к событиям, связанным с временными сборками, построенными на основе выходных файлов пользовательских средств. Дополнительные сведения об объекте 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. Добавьте объявление метода WebReferenceEventsSample сразу после метода OnConnection.

    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 перед запуском этого примера. В частности, проект должен быть проектом Visual Basic или Visual C#, поскольку объект VSLangProjWebReferencesEvents относится только к этим типам проектов.

  8. Приведите проект к объекту VSProject2, добавив следующий код в метод WebReferenceEventsSample.

    ' 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. Добавьте веб-ссылку в проект.

    ' 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 reference> в коде потребуется заменить 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 C# или Visual Basic в интегрированной среде разработки (IDE) Visual Studio.

  16. В меню Свойства щелкните Диспетчер надстроек и в диалоговом окне Диспетчер надстроек выберите надстройку. Нажмите ОК для выполнения надстройки.

Для тестирования обработки событий VSLangProjWebReferencesEvents

  1. Событие OnAfterWebReferenceAdded возникает после запуска надстройки, поскольку пример программно добавляет ссылку в веб-службу.

  2. Для тестирования события OnWebReferenceChanged:

    • В обозревателе решений откройте папку Веб-ссылки.

    • Выберите веб-службу и щелкните ее правой кнопкой мыши.

    • В раскрывающемся меню выберите Свойства.

    • В окне Свойства замените значение свойства Поведение URL с динамического на статическое, выбрав Статическое.

  3. Для тестирования события OnBeforeWebReferenceRemoved:

    • Выберите веб-службу и щелкните ее правой кнопкой мыши.

    • В раскрывающемся меню выберите Удалить.

Пример

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 Studio в Visual Basic и замените код класса Connect кодом из этого примера. Сведения о запуске надстройки см. в разделе Практическое руководство. Управление надстройками с помощью диспетчера надстроек.

См. также

Задачи

Практическое руководство. Отклик на события веб-ссылок (Visual C#)

Другие ресурсы

Реакция на события автоматизации

Отклик на события (проекты Visual Basic и Visual C#)