Compartilhar via


Escrever na janela de saída do Visual Studio

A janela de Saída no IDE do Visual Studio é uma Janela de Ferramenta que pode ser usada para fornecer status, diagnóstico/registro em log ou qualquer outro texto informativo para o usuário. Ao contrário dos Prompts de Usuário, que podem exibir uma caixa de mensagem, as mensagens gravadas na janela de Saída só serão exibidas se o usuário tiver a janela de Saída visível no IDE e se o canal estiver selecionado na lista suspensa Mostrar saída de. A janela de Saída fica visível quando o usuário seleciona o menu Exibir > Saída no menu principal.

Começar

Importante

As APIs da janela de saída VisualStudio.Extensibility estão atualmente em versão prévia e estão sujeitas a alterações. Qualquer extensão que aproveite essas APIs pode falhar em funcionar em versões futuras do Visual Studio e precisará ser atualizada quando uma versão mais recente das APIs for lançada.

Para começar, siga a seção criar o projeto na seção Introdução.

Trabalhar com a janela de Saída

Este guia foi projetado para cobrir as coisas mais comuns que você pode fazer com a janela Saída:

Obter um canal da janela de Saída

Para gravar na janela de Saída, você precisa de um canal da janela de Saída, que pode ser criado chamando VisualStudioExtensibility.Views().Output.CreateOutputChannelAsync().

OutputWindowExtensibility.CreateOutputChannelAsync()

O método CreateOutputChannelAsync() tem dois parâmetros:

Parâmetro Tipo Necessário Descrição
displayName string sim O nome de exibição da janela de saída. Isso é o que ficará visível no menu suspenso "Mostrar saída de:" no painel de saída. Esse valor é marcado como 'Localizável' para localizar o nome de exibição.
cancellationToken CancellationToken sim O CancellationToken da operação assíncrona.

Editar ou adicionar a classe Extension

Se o projeto ainda não contiver uma classe derivada de Extension, você precisará adicionar uma como a simples abaixo (nesse caso chamada MyExtension.cs):

using System.Resources;
using Microsoft.VisualStudio.Extensibility;

namespace MyProject
{
    public class MyExtension : Extension
    {
        // Initiailzation code here
    }
}

Adicionar o código de inicialização

Esse código pode estar em qualquer classe que você pretende usar para exibir mensagens de saída (como um comando ou), mas o importante é que CreateOutputChannelAsync() só pode ser chamado uma vez para um determinado nome de exibição do canal da janela de saída - se houver conflitos, então uma exceção será lançada - então considere chamá-lo em um método de inicialização única, como InitializeAsync().

public override async Task InitializeAsync(CancellationToken cancellationToken)
{
    string displayName = "My Output Window";

     // To use this Output window Channel elsewhere in the class, such as the ExecuteCommandAsync() method in a Command, save this result to a field in the class.
    OutputChannel? outputChannel = await this.Extensibility.Views().Output.CreateOutputChannelAsync(displayName, cancellationToken);
}

Gravar no canal de Saída

A instância OutputChannel obtida em Obter um canal de janela de Saída tem uma propriedade System.IO.TextWriter chamada Writer, que dá suporte a operações clássicas para gravar texto, como:

Além disso, você pode chamar WriteAsync() ou WriteLineAsync() diretamente no OutputChannel ou acessar um System.IO.Pipelines.PipeWriter por meio da propriedade PipeWriter.

Exemplo

Esse trecho de código pode ser usado em que você quiser exibir uma mensagem na janela de saída, como no método ExecuteCommandAsync() em um Command.

if (this.outputChannel != null)
{
    await this.outputChannel.Writer.WriteLineAsync("This is a test of the output channel TextWriter.");
    
    await this.outputChannel.WriteLineAsync("This is a test of the output channel.");

    var rom = new ReadOnlyMemory<byte>(Encoding.UTF8.GetBytes("This is a test of the output channel PipeWriter."));
    await this.outputChannel.PipeWriter.WriteLineAsync(rom, new());
}

Próximas etapas

Saiba Mais:

  • Saiba mais sobre comandos
  • Saiba mais sobre como expor a funcionalidade no IDE em uma janela de ferramenta
  • Saiba mais sobre como interagir com o usuário usando prompts

Examine o código de exemplo:

  • Consulte o exemplo OutputWindowSample para um exemplo completo de criação de uma extensão que usa a janela de saída.