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:
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 Extension
klasy , 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:
- Dowiedz się więcej o poleceniach
- Dowiedz się więcej na temat uwidaczniania funkcji w środowisku IDE w oknie narzędzi
- Dowiedz się więcej o interakcji z użytkownikiem za pomocą monitów użytkownika
Spójrz na przykładowy kod:
- Zobacz przykład OutputWindowSample, aby zapoznać się z pełnym przykładem tworzenia rozszerzenia korzystającego z okna danych wyjściowych.