Partager via


Écrire dans la fenêtre de sortie de Visual Studio

La fenêtre Sortie de l’IDE Visual Studio est une fenêtre outil qui peut être utilisée pour fournir l’état, les diagnostics/journalisation ou tout autre texte d’information à l’utilisateur. Contrairement aux messages d'invite utilisateur, qui peuvent afficher une boîte de dialogue, les messages écrits dans la fenêtre Sortie ne s'affichent que si l’utilisateur a la fenêtre Sortie visible dans l’IDE, et que votre canal est sélectionné dans la Afficher la sortie de liste déroulante. La fenêtre de sortie devient visible lorsque l’utilisateur sélectionne Affichage > Sortie dans le menu principal.

Démarrer

Important

Les API de la fenêtre Sortie VisualStudio.Extensibility sont actuellement en préversion et sont susceptibles de changer. Toute extension qui tire parti de ces API peut échouer dans les futures versions de Visual Studio et doit être mise à jour lorsqu’une version plus récente des API est publiée.

Pour commencer, suivez la section créer le projet dans Prise en main.

Travailler avec la fenêtre de sortie

Ce guide est conçu pour couvrir les tâches les plus courantes que vous pouvez effectuer avec la fenêtre Sortie :

Obtenir un canal pour la fenêtre de sortie

Pour écrire dans la fenêtre Sortie, vous avez besoin d’un canal de fenêtre sortie, qui peut être créé en appelant VisualStudioExtensibility.Views().Output.CreateOutputChannelAsync().

OutputWindowExtensibility.CreateOutputChannelAsync()

La méthode CreateOutputChannelAsync() a deux paramètres :

Paramètre Type Obligatoire Description
displayName string oui Nom d'affichage de la fenêtre de sortie. Il s’agit de ce qui sera visible dans le menu déroulant « Afficher la sortie à partir de : » dans le volet Sortie. Cette valeur est marquée comme 'Localizable' pour localiser le nom d'affichage.
cancellationToken CancellationToken oui CancellationToken pour l’opération asynchrone.

Modifier ou ajouter la classe Extension

Si votre projet ne contient pas encore de classe dérivée de Extension, vous devez en ajouter un comme le simple ci-dessous (dans ce cas appelé MyExtension.cs) :

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

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

Ajouter le code d’initialisation

Ce code peut être dans la classe que vous envisagez d’utiliser pour afficher les messages de sortie (par exemple, une Command), mais l’important est que CreateOutputChannelAsync() ne peut être appelé qu’une seule fois pour un nom d’affichage de canal de sortie donné ( s’il existe des conflits, une exception sera levée. Par conséquent, envisagez de l’appeler dans une méthode d’initialisation unique telle que 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);
}

Écrire dans le canal de sortie

L’instance OutputChannel obtenue dans obtenir un canal de fenêtre sortie a une propriété System.IO.TextWriter appelée Writer, qui prend en charge les opérations familières pour l’écriture de texte, telles que :

En outre, vous pouvez appeler WriteAsync() ou WriteLineAsync() directement sur le OutputChannel, ou accéder à un System.IO.Pipelines.PipeWriter via la propriété PipeWriter.

Exemple

Cet extrait de code peut être utilisé partout où vous souhaitez afficher un message dans la fenêtre Sortie, par exemple dans la méthode ExecuteCommandAsync() dans une 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());
}

Étapes suivantes

Pour en savoir plus:

  • En savoir plus sur les commandes
  • En savoir plus sur l’exposition des fonctionnalités dans l’IDE dans une fenêtre d’outil
  • En savoir plus sur l’interaction avec l’utilisateur avec les prompts utilisateur

Examinez l’exemple de code :

  • Consultez l’exemple OutputWindowSample pour obtenir un exemple complet de création d’une extension qui utilise la fenêtre de sortie.