Partilhar via


Como responder a eventos de referências Web (Visual C#)

Os eventos de ambiente definidos em VSLangProj e em VSLangProj80 são específicos dos projetos Visual C# ou Visual Basic. VSLangProjWebReferencesEvents é um novo tipo em Visual Studio 2005. É gerado quando uma referência Web é adicionada ao projeto do Visual Basic ou do Visual C#ou removida dele, ou quando suas propriedades são modificadas nele.

Este exemplo usa Visual C# para conectar métodos de manipulação de eventos para um projeto específico usando a propriedade de VSLangProjWebReferencesEvents.

Dica

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Para manipular eventos relacionados às referências Web usando Visual C#

  1. Criar um Visual Studio projeto de suplemento no Visual C#.

  2. No menu Projeto, clique em Adicionar Referência, clique na guia .NET, selecione os primeiros VSLangProj e VSLangProj80 e clique em OK.

  3. Adicione using VSLangProj; e using VSLangProj80; ao cabeçalho do arquivo Connect.cs.

  4. Na classe Conectar, inicialize uma variável para manipular o objeto VSLangProjWebReferencesEvents.

    private DTE2 _applicationObject;
    private AddIn _addInInstance;
    private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
    

    Nesse exemplo, a variável é chamada webRefEvents.

    Outros objetos no modelo de automação relacionam com a outros tipos de eventos que são específicos do projeto. Por exemplo, ImportsEvents é gerado quando uma importação é adicionada ou removida de uma coleção Imports. BuildManagerEvents se aplica a eventos relacionados aos assemblies compilados temporários de saída de ferramentas personalizadas. Para obter mais informações sobre o objeto BuildManager, consulte Introdução ao objeto BuildManager Para obter uma lista completa dos eventos específicos de tipos de projetos, consulte Objetos de evento (específicos a tipos de projetos). Para obter uma lista de eventos gerais de automação, consulte Objetos de eventos de automação.

  5. Adicione a seguinte chamada de método ao método OnConnection.

    public void OnConnection(object application, 
    ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Call the WebReferenceEventsSample method.
        WebReferenceEventsSample (_applicationObject);
    }
    
  6. Adicione a declaração do método WebReferenceEventsSample diretamente abaixo do método OnConnection com as seguintes declarações.

    public void WebReferenceEventsSample(DTE2 dte)
    {
        Solution2 soln = (Solution2)_applicationObject.Solution;
        Project proj;
        VSProject2 vsproj;
        String webServiceRef;
        proj = soln.Projects.Item(1);
    }
    

    A declaração proj = soln.Projects.Item(1); requer que um projeto seja aberto no ambiente de desenvolvimento integrado do Visual Studio (IDE) quando você executa esse exemplo. Em particular, o projeto deve ser um projeto do Visual Basic ou do Visual C# porque o objeto VSLangProjWebReferencesEvents é específico desses tipos de projeto.

  7. Converta o projeto para um objeto VSProject2 adicionando o seguinte código ao método WebReferenceEventsSample.

    // Get a reference to the VSProject2 object.
    vsproj = (VSProject2)proj.Object;
    
  8. Recupere os objetos de evento do modelo de automação no método WebReferenceEventsSample.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
    
  9. No método WebReferenceEventsSample, conecte os manipuladores de eventos.

    webRefEvents.OnAfterWebReferenceAdded += new
     _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
    webRefEvents.OnBeforeWebReferenceRemoved += new
    _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
    webRefEvents.OnWebReferenceChanged += new
     _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
    
  10. No método WebReferenceEventsSample, adicione uma referência feita a um serviço Web ao projeto.

    // Add a Web reference to the folder.
    // Replace the "<web reference>" with an actual Web service.
    MessageBox.Show("Adding a Web reference.", "Information");
    webServiceRef = "<web reference>";
    vsproj.AddWebReference(webServiceRef);
    

    Para adicionar uma referência a um serviço Web para o projeto de forma programática, você deve substituir o texto do espaço reservado, <web reference>, no código com a URL de um serviço Web real.

    Esta etapa faz com que o evento OnAfterWebReferenceAdded seja acionado quando você executa esse suplemento.

  11. Adicione procedimentos para cada evento relativo ao objeto de evento abaixo do método WebReferenceEventsSample.

    void webRefEvents_OnWebReferenceChanged(object pDispatch)
    {
        MessageBox.Show("A Web reference was changed.");
    }
    void webRefEvents_OnBeforeWebReferenceRemoved(object pDispatch)
    {
        MessageBox.Show("A Web reference was removed.");
    }
    void webRefEvents_OnAfterWebReferenceAdded(object pDispatch)
    {
        MessageBox.Show("A Web reference was added." + pDispatch.Name);
    }
    
  12. Por fim, para impedir que o Visual Studio reduza a velocidade do seu sistema ao continuar a monitorar eventos relacionados a janela depois de fechar o suplemento, desabilite a manipulação de eventos no método OnDisconnection.

    public void OnDisconnection(ext_DisconnectMode disconnectMode,
     ref Array custom)
    {
        // If the delegate handlers have been connected, then 
        // disconnect them here. 
        // If you do not do this, the handlers may still 
        // fire because garbage collection has not removed them.
        if (webRefEvents != null)
        {
            webRefEvents.OnAfterWebReferenceAdded -= new
     _dispVSLangProjWebReferencesEvents
    _OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
            webRefEvents.OnBeforeWebReferenceRemoved -= new
     _dispVSLangProjWebReferencesEvents
    _OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
            webRefEvents.OnWebReferenceChanged -= new
     _dispVSLangProjWebReferencesEvents
    _OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
        }
    }
    

    O código completo é listado na seção Exemplo deste tópico.

  13. Para compilar o suplemento, clique em Compilar Solução no menu Compilação.

  14. Abra um projeto de Visual C# ou Visual Basic no ambiente de desenvolvimento integrado (IDE) do Visual Studio.

  15. No menu de Ferramentas , clique Gerenciador de Suplementos, e selecione o suplemento da caixa de diálogo Gerenciador de Suplementos . Clique OK para executar o suplemento.

Para testar a manipulação de eventos VSLangProjWebReferencesEvents

  1. O evento OnAfterWebReferenceAdded dispara quando você executa o suplemento, pois o exemplo adiciona uma referência a um serviço Web por meio de programação.

  2. Para testar o evento OnWebReferenceChanged:

    • Expanda a pasta Referências da Web no Gerenciador de Soluções.

    • Selecione o serviço Web e clique com o botão direito nele.

    • Selecione Propriedades no menu suspenso.

    • Na janela de Propriedades , altere o comportamento da URL de dinâmico para estático, selecionando Estático na caixa de combinação Comportamento da URL.

  3. Para testar o evento OnBeforeWebReferenceRemoved:

    • Selecione o serviço Web e clique com o botão direito nele.

    • Selecione Excluir no menu suspenso.

Exemplo

O exemplo a seguir é um suplemento básico do Visual Studio que demonstra como responder a eventos de referências Web usando a automação do Visual Studio.

using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using System.Windows.Forms;
namespace MyAddin
{
public class Connect : Object, IDTExtensibility2
{
    public Connect()
    {
    }
    public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Call the WebReferenceEventsSample method.
        WebReferenceEventsSample(_applicationObject);
    }
    public void WebReferenceEventsSample(DTE2 dte)
    {
        try
         {
            Solution2 soln =
 (Solution2)_applicationObject.Solution;
            Project proj;
            VSProject2 vsproj;
            String webServiceRef;
            proj = soln.Projects.Item(1);
            // Get a reference to the VSProject2 object.
            vsproj = (VSProject2)proj.Object;
            //Connect Web references events.
            webRefEvents = 
vsproj.Events2.VSLangProjWebReferencesEvents;
            webRefEvents.OnAfterWebReferenceAdded +=new
 _dispVSLangProjWebReferencesEvents
_OnAfterWebReferenceAddedEventHandler
(webRefEvents_OnAfterWebReferenceAdded);
            webRefEvents.OnBeforeWebReferenceRemoved += new 
_dispVSLangProjWebReferencesEvents
_OnBeforeWebReferenceRemovedEventHandler
(webRefEvents_OnBeforeWebReferenceRemoved);
            webRefEvents.OnWebReferenceChanged += new
 _dispVSLangProjWebReferencesEvents
_OnWebReferenceChangedEventHandler
(webRefEvents_OnWebReferenceChanged);
            // Create a Web references folder.
            MessageBox.Show("Creating a Web references folder."
, "Information");
            vsproj.CreateWebReferencesFolder();
            // Add a Web reference to the folder.
            // Replace the "<web reference>" with an 
            // actual Web service URL.
            MessageBox.Show("Adding a Web reference."
, "Information");
            webServiceRef = "<web reference>";
            vsproj.AddWebReference(webServiceRef);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    void webRefEvents_OnWebReferenceChanged(object pDispatch)
    {
        MessageBox.Show("A Web reference was changed.");
    }
    void webRefEvents_OnBeforeWebReferenceRemoved(object pDispatch)
    {
        MessageBox.Show("A Web reference was removed.");
    }
    void webRefEvents_OnAfterWebReferenceAdded(object pDispatch)
    {
        MessageBox.Show("A Web reference was added.");
    }
    public void OnDisconnection(ext_DisconnectMode disconnectMode,
ref Array custom)
    {
        // If the delegate handlers have been connected, then 
        // disconnect them here. 
        // If you do not do this, the handlers may still 
        // fire because garbage collection has not removed them.
        if (webRefEvents != null)
        {
            webRefEvents.OnAfterWebReferenceAdded -= new
 _dispVSLangProjWebReferencesEvents
_OnAfterWebReferenceAddedEventHandler
 (webRefEvents_OnAfterWebReferenceAdded);
            webRefEvents.OnBeforeWebReferenceRemoved -= new
 _dispVSLangProjWebReferencesEvents
_OnBeforeWebReferenceRemovedEventHandler
(webRefEvents_OnBeforeWebReferenceRemoved);
            webRefEvents.OnWebReferenceChanged -= new
 _dispVSLangProjWebReferencesEvents
_OnWebReferenceChangedEventHandler
(webRefEvents_OnWebReferenceChanged);
        }
    }
    public void OnAddInsUpdate(ref Array custom)
    {
    }
    public void OnStartupComplete(ref Array custom)
    {
    }
    public void OnBeginShutdown(ref Array custom)
    {
    }

    private DTE2 _applicationObject;
    private AddIn _addInInstance;
    private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
    }
}

Compilando o código

Para compilar este código, crie um novo projeto do suplemento Visual Studio em Visual C# e substitua o código da classe Conectar com o código no exemplo. Para obter informações sobre como executar um suplemento, consulte Como controlar suplementos usando o Gerenciador de Suplementos.

Consulte também

Tarefas

Como responder a eventos de referências Web (Visual Basic)

Outros recursos

Respondendo a eventos de automação

Respondendo a eventos (projetos do Visual Basic e do Visual C#)