Visual Studio の出力ウィンドウに書き込む
Visual Studio IDE の出力ウィンドウは、状態、診断/ログ記録、またはその他の情報テキストをユーザーに配信するために使用できるツール ウィンドウです。 メッセージ ボックスが表示される場合があるユーザー プロンプトとは異なり、出力ウィンドウに書き込まれたメッセージは、ユーザーが IDE で [出力] ウィンドウを表示し、[Show output from]\(出力を表示する\) ドロップダウン リストでチャネルが選択されている場合にのみ表示されます。 [出力] ウィンドウは、ユーザーが [メイン] メニューから [出力の表示>] メニューを選択すると表示されます。
作業の開始
重要
VisualStudio.Extensibility 出力ウィンドウ API は現在プレビュー段階であり、変更される可能性があります。 これらの API を利用する拡張機能は、将来のバージョンの Visual Studio で動作しない可能性があり、新しいバージョンの API がリリースされたときに更新する必要があります。
作業を開始するには、「作業の開始」 セクションの「プロジェクト の作成」セクションに従います。
[出力] ウィンドウを操作する
このガイドは、[出力] ウィンドウで実行できる最も一般的な操作について説明するように設計されています。
出力ウィンドウ チャネルを取得する
出力ウィンドウに書き込むには、出力ウィンドウチャネルが VisualStudioExtensibility.Views().Output.GetChannelAsync()
必要です。
OutputWindowExtensibility.GetChannelAsync()
この GetChannelAsync()
メソッドには、次の 3 つのパラメーターがあります。
パラメーター | タイプ | Required | Description |
---|---|---|---|
identifier |
string |
はい | チャネルの一意識別子。 |
displayNameResourceId |
string |
はい | 出力ウィンドウの 表示名を含むリソース の名前。 これは、[出力] ウィンドウの [出力元を表示する] ドロップダウン メニューに表示されます。 たとえば、"OutputWindowDisplayName" という名前のリソースを使用してリソース ファイルを呼び出 MyStrings.resx した場合.resx は、このパラメーターに使用nameof(MyStrings.OutputWindowDisplayName) します。 |
cancellationToken |
CancellationToken |
はい | CancellationToken 非同期操作の場合。 |
表示名リソース ID の要件
出力ウィンドウ API の現在のバージョンでは、出力ウィンドウ チャネルの表示名をリソース ファイルに格納する必要があります。
- ファイル (サンプル) を
.resx
追加し、プロジェクト (サンプル) で ResXFileCodeGenerator で構成されていることを確認します。 - プロジェクトに Extension クラス がまだない場合は追加します (サンプル)
- Extension クラスでプロパティを
ResourceManager
オーバーライドして、.resx ファイルに対応する ResourceManager を返します。
リソース ファイルを編集する.resx
リソース ファイル (この場合 MyStrings.resx
) は、Visual Studio で使用できるデザイナー UI を使用して編集できます。
または、生の XML を編集して次のスニペットを追加することで、リソース ファイルを編集することもできます。
<data name="OutputWindowDisplayName" xml:space="preserve">
<value>My Output window</value>
</data>
プロジェクト ファイルを編集する.csproj
プロジェクト ファイルに次のコードを .csproj
追加します (IDE を使用してファイルを .resx
追加した場合は、既に存在している可能性があります)。
<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>
Extension クラスを編集または追加する
プロジェクトに派生する Extension
クラスがまだ含まれていない場合は、以下の単純なクラスのように追加する必要があります (この場合は呼び出 MyExtension.cs
されます)。
using System.Resources;
using Microsoft.VisualStudio.Extensibility;
namespace MyProject
{
public class MyExtension : Extension
{
protected override ResourceManager? ResourceManager => MyStrings.ResourceManager;
}
}
プロジェクトに既にこのようなクラスが含まれている場合は、プロパティを設定 ResourceManager
する行を追加するだけで済みます。
Note
オーバーライドしない限り、クラスがリソース クラスとMyStrings
同じ名前空間にあることを確認MyExtension
します。リソース クラスは、既定ではプロジェクトの名前になります。
初期化コードを追加する
このコードは、出力メッセージを表示するために使用するクラス (Command など) でもかまいませんが、重要なのはGetChannelAsync()
、特定の出力ウィンドウ チャネル ID に対して 1 回だけ呼び出すことができるということです。そのため、1 回限りの初期化メソッド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);
}
[出力] ウィンドウに書き込む
OutputWindow
出力ウィンドウの取得チャネルで取得されたインスタンスにはSystem.IO.TextWriter
、次のようなテキストを書き込むための使い慣れた操作をサポートする、というプロパティWriter
があります。
例
このスニペットは、コマンドのメソッドなど、出力ウィンドウにメッセージを ExecuteCommandAsync()
表示する場所であれば どこでも使用できます。
if (this.outputWindow != null)
{
await this.outputWindow.Writer.WriteLineAsync("This is a test of the output window.");
}
次のステップ
詳細情報:
- コマンドの詳細
- ツール ウィンドウでの IDE での機能の公開の 詳細
- ユーザー プロンプトを使用してユーザーと 対話する方法について説明します
サンプル コードを確認します。
- 出力ウィンドウを使用する拡張機能を 作成する完全な例については、OutputWindowSample サンプルを参照してください。