Compartilhar via


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

Os eventos de ambiente definidos na VSLangProj e VSLangProj80 são específicas para Visual C# ou Visual Basic projetos.VSLangProjWebReferencesEventsé um novo tipo de Visual Studio 2005.Ele é disparado quando uma referência da Web for adicionada ou removida ou quando suas propriedades são modificadas em um Visual Basic ou Visual C# project.

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

ObservaçãoObservação

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o General Development Settings ativo.Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu.Para obter mais informações, consulte Configurações de Visual Studio.

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

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

  2. Sobre o projeto menu, clique em Add Reference, clique no .NET , selecione o primeiro VSLangProj e VSLangProj80 e clique em OK.

  3. Adicionar using VSLangProj; e using VSLangProj80; na parte superior do arquivo Connect. cs.

  4. Na classe Connect, inicializar uma variável para lidar com o VSLangProjWebReferencesEvents objeto.

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

    Neste exemplo, a variável é chamada webRefEvents.

    Outros objetos no modelo de automação referem-se a outros tipos de eventos que são específicos para o projeto.Por exemplo, ImportsEvents é disparado quando uma importação é adicionada ou removida de um Imports coleção.BuildManagerEventsaplica-se para eventos relacionados a assemblies temporários criados a partir de saídas de ferramentas personalizadas.Para obter mais informações sobre BuildManager de objeto, consulte Introdução ao objeto BuildManager.Para obter uma lista completa dos eventos que são específicos para tipos de projetos, consulte Objetos de evento (específicas para tipos de projetos).Para obter uma lista de eventos de automação gerais, consulte Objetos de evento de automação.

  5. Adicione a seguinte chamada de método para o 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 de método de WebReferenceEventsSample diretamente abaixo o 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 é aberto no Visual Studio o ambiente de desenvolvimento integrado (IDE), quando você executar esse exemplo.Em particular, o projeto deve ser um Visual Basic ou Visual C# de projeto porque a VSLangProjWebReferencesEvents objeto é específico para esses tipos de projeto.

  7. Converter o projeto para um VSProject2 o objeto, 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 de no método WebReferenceEventsSample, o modelo de automação.

    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 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);
    

    Programaticamente adicionar uma referência a um serviço Web ao projeto, você deve substituir o texto de espaço reservado, <web reference>, no código com a URL de um serviço da Web real.

    Essa etapa faz com que o OnAfterWebReferenceAdded evento seja acionado quando você executar este suplemento.

  11. Adicione os procedimentos para cada evento relacionado ao objeto de evento abaixo no 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 evitar Visual Studio da redução do seu sistema continuando a monitorar eventos relacionados a janela depois de fechar o add-in, desabilitar o tratamento de evento 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 está listado na seção exemplo deste tópico.

  13. Para construir o add-in, clique em Build Solution sobre o Build menu.

  14. Abrir um Visual C# ou Visual Basic de projeto na Visual Studio o ambiente de desenvolvimento integrado (IDE).

  15. No Ferramentas menu, clique em Gerenciador de suplementose selecione o add-in da Gerenciador de suplementos caixa de diálogo.Clique em OK para executar seu suplemento.

Para testar o tratamento de evento VSLangProjWebReferencesEvents

  1. O OnAfterWebReferenceAdded evento é acionado uma vez quando você executa o add-in, porque o exemplo adiciona uma referência a um serviço da Web por meio de programação.

  2. Para testar o OnWebReferenceChanged evento:

    • Expanda o Referências da Web pasta na Solution Explorer.

    • Selecione o serviço da Web e clique sobre ela.

    • Selecione Propriedades no menu drop-down.

    • No Propriedades janela, alterar o comportamento de URL de dinâmico para estático por selecionando estático da Comportamento URL caixa de combinação.

  3. Para testar o OnBeforeWebReferenceRemoved evento:

    • Selecione o serviço da Web e clique sobre ela.

    • Selecione Excluir no menu drop-down.

Exemplo

O exemplo a seguir é um basic Visual Studio suplemento que demonstra como responder a web faz referência eventos usando Visual Studio automação.

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 esse código, crie um novo Visual Studio projeto de suplemento no Visual C# e substitua o código da classe conectar-se com o código do exemplo.Para obter informações sobre como executar um suplemento, consulte Como: Add-Ins de controle, usando o Gerenciador de suplemento.

Consulte também

Tarefas

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

Outros recursos

Respondendo a eventos de automação

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