Escritura en la ventana de salida de Visual Studio
La ventana Salida del IDE de Visual Studio es una ventana de herramientas que se puede usar para entregar el estado, el diagnóstico o el registro, o cualquier otro texto informativo al usuario. A diferencia de los mensajes de usuario, que pueden mostrar un cuadro de mensaje, los mensajes escritos en la ventana Salida solo se muestran si el usuario tiene la ventana Salida visible en el IDE y el canal está seleccionado en la lista desplegable Mostrar salida de . La ventana Salida se vuelve visible cuando el usuario selecciona el menú Ver > salida en el menú principal.
Introducción
Importante
Las API de la ventana salida de extensibilidad de VisualStudio.Extensibility están actualmente en versión preliminar y están sujetas a cambios. Es posible que cualquier extensión que aproveche estas API no funcione en versiones futuras de Visual Studio y tendrá que actualizarse cuando se publique una versión más reciente de las API.
Para empezar, siga la sección Crear el proyecto en la sección Introducción.
Trabajar con la ventana Salida
Esta guía está diseñada para cubrir las cosas más comunes que puede hacer con la ventana Salida:
Obtención de un canal de ventana de salida
Para escribir en la ventana Salida, necesita un canal de ventana de salida, que se puede crear llamando a VisualStudioExtensibility.Views().Output.GetChannelAsync()
.
OutputWindowExtensibility.GetChannelAsync()
El GetChannelAsync()
método tiene tres parámetros:
Parámetro | Type | Obligatorio | Descripción |
---|---|---|---|
identifier |
string |
sí | Identificador único para el canal. |
displayNameResourceId |
string |
sí | Nombre del recurso que contiene el nombre para mostrar de la ventana de salida. Esto es lo que estará visible en el menú desplegable "Mostrar salida de:" en el panel Salida. Por ejemplo, si tuviera un .resx archivo de recursos llamado MyStrings.resx con un recurso denominado "OutputWindowDisplayName", usaría nameof(MyStrings.OutputWindowDisplayName) para este parámetro. |
cancellationToken |
CancellationToken |
sí | para CancellationToken la operación asincrónica. |
Requisitos de identificador de recurso de nombre para mostrar
La versión actual de la API de ventana de salida requiere que el nombre para mostrar del canal de ventana salida se almacene en un archivo de recursos:
- Agregue un
.resx
archivo (ejemplo) y asegúrese de que está configurado con ResXFileCodeGenerator en el proyecto (ejemplo). - Agregue una clase Extension al proyecto, si aún no tiene una (ejemplo)
- En la clase Extension, invalide la
ResourceManager
propiedad para devolver el ResourceManager correspondiente al archivo .resx.
Edición del archivo de .resx
recursos
Puede editar el archivo de recursos (en este caso MyStrings.resx
) mediante la interfaz de usuario del diseñador disponible en Visual Studio:
Como alternativa, puede editar el archivo de recursos editando el XML sin formato para agregar el siguiente fragmento de código:
<data name="OutputWindowDisplayName" xml:space="preserve">
<value>My Output window</value>
</data>
Editar el archivo de .csproj
proyecto
Agregue lo siguiente al .csproj
archivo de proyecto (si agregó el .resx
archivo a través del IDE, es posible que ya esté presente):
<ItemGroup>
<Compile Update="MyStrings.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>MyStrings.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="MyStrings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>MyStrings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
Editar o agregar la clase Extension
Si el proyecto aún no contiene una clase que deriva de Extension
, debe agregar una como la simple siguiente (en este caso denominada MyExtension.cs
):
using System.Resources;
using Microsoft.VisualStudio.Extensibility;
namespace MyProject
{
public class MyExtension : Extension
{
protected override ResourceManager? ResourceManager => MyStrings.ResourceManager;
}
}
Si el proyecto ya contiene dicha clase, solo tiene que agregar la línea que establece la ResourceManager
propiedad .
Nota:
Asegúrese de que la MyExtension
clase se encuentra en el mismo espacio de nombres que la MyStrings
clase de recursos, que tiene como valor predeterminado el nombre del proyecto, a menos que la haya invalidado.
Adición del código de inicialización
Este código puede estar en la clase que quiera usar para mostrar mensajes de salida (como un comando), pero lo importante es que GetChannelAsync()
solo se puede llamar una vez para un identificador de canal de ventana de salida determinado, por lo que considere la posibilidad de llamarlo en un método de inicialización único, como InitializeAsync()
.
public override async Task InitializeAsync(CancellationToken cancellationToken)
{
string id = "MyOutputWindow";
string displayNameResourceId = nameof(MyStrings.OutputWindowDisplayName);
// 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.
OutputWindow? outputWindow = await this.Extensibility.Views().Output.GetChannelAsync(id, displayNameResourceId, cancellationToken);
}
Escribir en la ventana Salida
La OutputWindow
instancia obtenida en Obtener un canal de ventana de salida tiene una System.IO.TextWriter
propiedad denominada Writer
, que admite operaciones conocidas para escribir texto, como:
Ejemplo
Este fragmento de código se puede usar siempre que quiera mostrar un mensaje en la ventana Salida, como en el ExecuteCommandAsync()
método de un comando.
if (this.outputWindow != null)
{
await this.outputWindow.Writer.WriteLineAsync("This is a test of the output window.");
}
Pasos siguientes
Más información:
- Más información sobre los comandos
- Más información sobre cómo exponer la funcionalidad en el IDE en una ventana de herramientas
- Más información sobre cómo interactuar con el usuario con avisos de usuario
Vea el código de ejemplo:
- Consulte el ejemplo OutputWindowSample para obtener un ejemplo completo de creación de una extensión que usa la ventana de salida.