Zapisywanie w oknie danych wyjściowych programu Visual Studio

Okno Dane wyjściowe w środowisku IDE programu Visual Studio to okno narzędzi, które może służyć do dostarczania stanu, diagnostyki/rejestrowania lub dowolnego innego tekstu informacyjnego użytkownikowi. W przeciwieństwie do monitów użytkownika, które mogą wyświetlać okno komunikatów, komunikaty zapisywane w oknie Dane wyjściowe są wyświetlane tylko wtedy, gdy użytkownik ma okno Dane wyjściowe widoczne w środowisku IDE, a kanał jest zaznaczony na liście rozwijanej Pokaż dane wyjściowe. Okno Dane wyjściowe staje się widoczne, gdy użytkownik wybierze menu Wyświetl > dane wyjściowe z menu głównego.

Rozpocznij

Ważne

Interfejsy API okna danych wyjściowych programu VisualStudio.Extensibility są obecnie dostępne w wersji zapoznawczej i mogą ulec zmianie. Każde rozszerzenie korzystające z tych interfejsów API może nie działać w przyszłych wersjach programu Visual Studio i będzie konieczne zaktualizowanie po wydaniu nowszej wersji interfejsów API.

Aby rozpocząć pracę, postępuj zgodnie z sekcją tworzenie projektu w sekcji Wprowadzenie.

Praca z oknem Dane wyjściowe

Ten przewodnik jest przeznaczony do okładania najbardziej typowych rzeczy, które można wykonać za pomocą okna Dane wyjściowe:

Pobieranie kanału okna danych wyjściowych

Aby zapisać dane w oknie Dane wyjściowe, potrzebny jest kanał okna danych wyjściowych, który można utworzyć, wywołując metodę VisualStudioExtensibility.Views().Output.GetChannelAsync().

OutputWindowExtensibility.GetChannelAsync()

Metoda GetChannelAsync() ma trzy parametry:

Parametr Type Wymagania opis
identifier string tak Unikatowy identyfikator kanału.
displayNameResourceId string tak Nazwa zasobu zawierającego nazwę wyświetlaną okna danych wyjściowych. Będzie to widoczne w menu rozwijanym "Pokaż dane wyjściowe z:" w okienku Dane wyjściowe.

Jeśli na przykład masz .resx plik zasobu o MyStrings.resx nazwie "OutputWindowDisplayName", należy użyć nameof(MyStrings.OutputWindowDisplayName) dla tego parametru.
cancellationToken CancellationToken tak Element CancellationToken dla operacji asynchronicznych.

Wymagania dotyczące identyfikatora zasobu nazwy wyświetlanej

Bieżąca wersja interfejsu API okna danych wyjściowych wymaga, aby nazwa wyświetlana kanału okna danych wyjściowych została zapisana w pliku zasobu:

  • .resx Dodaj plik (przykład) i upewnij się, że został skonfigurowany przy użyciu modułu ResXFileCodeGenerator w projekcie (przykład).
  • Dodaj klasę Extension do projektu, jeśli jeszcze jej nie ma (przykład)
  • W klasie Extension zastąpij ResourceManager właściwość , aby zwrócić właściwość ResourceManager odpowiadającą plikowi resx.

.resx Edytowanie pliku zasobu

Plik zasobu (w tym przypadku MyStrings.resx) można edytować przy użyciu interfejsu użytkownika projektanta dostępnego w programie Visual Studio:

resx Designer

Alternatywnie możesz edytować plik zasobu, edytując nieprzetworzone dane XML, aby dodać następujący fragment kodu:

  <data name="OutputWindowDisplayName" xml:space="preserve">
    <value>My Output window</value>
  </data>

.csproj Edytowanie pliku projektu

Dodaj następujący kod do .csproj pliku projektu (jeśli plik został dodany .resx za pośrednictwem środowiska IDE, może to być już obecne):

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

Edytowanie lub dodawanie klasy Extension

Jeśli projekt nie zawiera jeszcze klasy pochodzącej z Extensionklasy , musisz dodać taką klasę jak prostą poniżej (w tym przypadku o nazwie MyExtension.cs):

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

namespace MyProject
{
    public class MyExtension : Extension
    {
        protected override ResourceManager? ResourceManager => MyStrings.ResourceManager;
    }
}

Jeśli projekt zawiera już taką klasę, wystarczy dodać wiersz, który ustawia ResourceManager właściwość.

Uwaga

Upewnij się, że MyExtension klasa znajduje się w tej samej przestrzeni nazw co MyStrings klasa zasobów, która domyślnie ma nazwę projektu, chyba że została zastąpiona.

Dodawanie kodu inicjowania

Ten kod może być w dowolnej klasie, która ma być używana do wyświetlania komunikatów wyjściowych (takich jak polecenie), ale ważne jest, aby GetChannelAsync() można było wywołać tylko raz dla danego identyfikatora kanału okna danych wyjściowych, więc rozważ wywołanie go w jednorazowej metodzie inicjowania, takiej jak 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);
}

Zapisywanie w oknie Dane wyjściowe

Wystąpienie OutputWindow uzyskane w kanale pobierania okna danych wyjściowych ma System.IO.TextWriter właściwość o nazwie Writer, która obsługuje znane operacje pisania tekstu, takie jak:

Przykład

Ten fragment kodu może być używany wszędzie tam, gdzie chcesz wyświetlić komunikat w oknie Dane wyjściowe, na przykład w ExecuteCommandAsync() metodzie w poleceniu.

if (this.outputWindow != null)
{
    await this.outputWindow.Writer.WriteLineAsync("This is a test of the output window.");
}

Następne kroki

Więcej informacji:

Spójrz na przykładowy kod: