Share via


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

リソース ファイル (この場合 MyStrings.resx) は、Visual Studio で使用できるデザイナー UI を使用して編集できます。

resx Designer

または、生の 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.");
}

次のステップ

詳細情報:

サンプル コードを確認します。