Compartir a través de


Extensión de la ventana Salida

La ventana Salida es un conjunto de paneles de texto de lectura y escritura. Visual Studio tiene estos paneles integrados: Compilación, en el que los proyectos comunican mensajes sobre compilaciones y General, en los que Visual Studio comunica mensajes sobre el IDE. Los proyectos obtienen una referencia al panel Compilación automáticamente a través de los IVsBuildableProjectCfg métodos de interfaz y Visual Studio ofrece acceso directo al panel General a través del SVsGeneralOutputWindowPane servicio. Además de los paneles integrados, puede crear y administrar sus propios paneles personalizados.

Puede controlar la ventana Salida directamente a través de las IVsOutputWindow interfaces y IVsOutputWindowPane . La IVsOutputWindow interfaz, que ofrece el SVsOutputWindow servicio, define métodos para crear, recuperar y destruir paneles de ventana de salida . La IVsOutputWindowPane interfaz define métodos para mostrar paneles, ocultar paneles y manipular su texto. Una forma alternativa de controlar la ventana Salida es a través de los OutputWindow objetos y OutputWindowPane del modelo de objetos de Automatización de Visual Studio. Estos objetos encapsulan casi toda la funcionalidad de las IVsOutputWindow interfaces y IVsOutputWindowPane . Además, los OutputWindow objetos y OutputWindowPane agregan alguna funcionalidad de nivel superior para facilitar la enumeración de los paneles de ventana salida y recuperar texto de los paneles.

Crear una extensión que use el panel Salida

Puede realizar una extensión que ejerce diferentes aspectos del panel Salida.

  1. Cree un proyecto VSIX denominado TestOutput con un comando de menú denominado TestOutput. Para obtener más información, vea Crear una extensión con un comando de menú.

  2. Agregue las siguientes referencias:

    1. EnvDTE

    2. EnvDTE80

  3. En TestOutput.cs, agregue la siguiente instrucción using:

    using EnvDTE;
    using EnvDTE80;
    
  4. En TestOutput.cs, elimine el ShowMessageBox método . Agregue el código auxiliar del método siguiente:

    private void OutputCommandHandler(object sender, EventArgs e)
    {
    }
    
  5. En el constructor TestOutput, cambie el controlador de comandos a OutputCommandHandler. Esta es la parte que agrega los comandos:

    OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
    if (commandService != null)
    {
        CommandID menuCommandID = new CommandID(MenuGroup, CommandId);
        EventHandler eventHandler = OutputCommandHandler;
        MenuCommand menuItem = new MenuCommand(eventHandler, menuCommandID);
        commandService.AddCommand(menuItem);
    }
    
  6. Las secciones siguientes tienen diferentes métodos que muestran diferentes formas de tratar con el panel Salida. Puede llamar a estos métodos al cuerpo del OutputCommandHandler() método . Por ejemplo, el código siguiente agrega el CreatePane() método proporcionado en la sección siguiente.

    private void OutputCommandHandler(object sender, EventArgs e)
    {
        CreatePane(new Guid(), "Created Pane", true, false);
    }
    

Crear una ventana de salida con IVsOutputWindow

En este ejemplo se muestra cómo crear un panel de ventana de salida mediante la IVsOutputWindow interfaz .

void CreatePane(Guid paneGuid, string title,
    bool visible, bool clearWithSolution)
{
    IVsOutputWindow output =
        (IVsOutputWindow)GetService(typeof(SVsOutputWindow));
    IVsOutputWindowPane pane;

    // Create a new pane.
    output.CreatePane(
        ref paneGuid,
        title,
        Convert.ToInt32(visible),
        Convert.ToInt32(clearWithSolution));

    // Retrieve the new pane.
    output.GetPane(ref paneGuid, out pane);

     pane.OutputString("This is the Created Pane \n");
}

Si agrega este método a la extensión dada en la sección anterior, al hacer clic en el comando Invocar testOutput , debería ver la ventana Salida con un encabezado que indica Mostrar salida de: CreatedPane y las palabras Este es el panel creado en el propio panel.

Creación de una ventana de salida con OutputWindow

En este ejemplo se muestra cómo crear un panel de ventana de salida mediante el OutputWindow objeto .

void CreatePane(string title)
{
    DTE2 dte = (DTE2)GetService(typeof(DTE));
    OutputWindowPanes panes =
        dte.ToolWindows.OutputWindow.OutputWindowPanes;

    try
    {
        // If the pane exists already, write to it.
        panes.Item(title);
    }
    catch (ArgumentException)
    {
        // Create a new pane and write to it.
        panes.Add(title);
    }
}

Aunque la OutputWindowPanes colección permite recuperar un panel de ventana de salida por su título, no se garantiza que los títulos del panel sean únicos. Cuando se duda de la exclusividad de un título, use el método para recuperar el GetPane panel correcto por su GUID.

Si agrega este método a la extensión dada en la sección anterior, al hacer clic en el comando Invocar testOutput , debería ver la ventana Salida con un encabezado que indica Mostrar salida de: DTEPane y las palabras Agregado panel DTE en el propio panel.

Eliminar una ventana salida

En este ejemplo se muestra cómo eliminar un panel de ventana de salida .

void DeletePane(Guid paneGuid)
{
    IVsOutputWindow output =
    (IVsOutputWindow)ServiceProvider.GetService(typeof(SVsOutputWindow));

    IVsOutputWindowPane pane;
    output.GetPane(ref paneGuid, out pane);

    if (pane == null)
    {
        CreatePane(paneGuid, "New Pane\n", true, true);
    }
     else
    {
        output.DeletePane(ref paneGuid);
    }
}

Si agrega este método a la extensión dada en la sección anterior, al hacer clic en el comando Invocar testOutput , debería ver la ventana Salida con un encabezado que indica Mostrar salida de: Nuevo panel y las palabras Agregado panel creado en el propio panel. Si hace clic de nuevo en el comando Invocar testOutput , se elimina el panel.

Obtener el panel General de la ventana Salida

En este ejemplo se muestra cómo obtener el panel General integrado de la ventana Salida.

IVsOutputWindowPane GetGeneralPane()
{
    return (IVsOutputWindowPane)GetService(
        typeof(SVsGeneralOutputWindowPane));
}

Si agrega este método a la extensión dada en la sección anterior, al hacer clic en el comando Invocar testOutput , debería ver que la ventana Salida muestra las palabras Encontrado general en el panel.

Obtener el panel Compilación de la ventana Salida

En este ejemplo se muestra cómo buscar el panel Compilar y escribir en él. Puesto que el panel Compilación no está activado de forma predeterminada, también lo activa.

void OutputTaskItemStringExExample(string buildMessage)
{
    EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)ServiceProvider.GetService(typeof(EnvDTE.DTE));

    EnvDTE.OutputWindowPanes panes =
        dte.ToolWindows.OutputWindow.OutputWindowPanes;
    foreach (EnvDTE.OutputWindowPane pane in panes)
        {
            if (pane.Name.Contains("Build"))
            {
                pane.OutputString(buildMessage + "\n");
                pane.Activate();
                return;
             }
        }
}