Von Bedeutung
Visual Studio 2022 バージョン 17.9 以降では、新しい VisualStudio.Extensibility モデルを使用してアウトプロセスで実行される .NET 6.0 以降でビジュアライザーを記述できるようになりました。 新しいモデルを使用して作成された拡張機能については、「 Visual Studio デバッガー ビジュアライザーを作成 する」のドキュメントを参照してください。 以前のバージョンの Visual Studio をサポートする必要がある場合、またはライブラリ DLL の一部としてカスタム ビジュアライザーを配布する場合は、この記事の情報を使用します。これは、以前の拡張機能開発モデル (VSSDK) にのみ適用されます。
このチュートリアルでは、C# を使用して単純なビジュアライザーを記述する方法について説明します。 このチュートリアルで作成するビジュアライザーは、Windows フォームを使用して文字列の内容を表示します。 この単純な文字列ビジュアライザー自体は特に役に立ちませんが、他のデータ型に対してより便利なビジュアライザーを作成するために従う必要がある基本的な手順を示しています。
注
表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによって、ヘルプで説明されているものとは異なる場合があります。 設定を変更するには、[ ツール ] メニューに移動し、[ 設定のインポートとエクスポート] を選択します。 詳細については、「リセット設定」を参照してください。
ビジュアライザー コードは、デバッガーが読み取る DLL ファイルに配置する必要があります。 したがって、最初の手順は、DLL のクラス ライブラリ プロジェクトを作成することです。
ビジュアライザーを手動で作成する
ビジュアライザーを作成するには、次のタスクを実行します。
クラス ライブラリ プロジェクトを作成する
新しいクラス ライブラリ プロジェクトを作成するには、 ファイル>New>Project を選択します。
言語ドロップダウンで、 C# を選択します。
検索ボックスに、「 クラス ライブラリ」と入力します。 [クラス ライブラリ (.NET Framework)] を選択し、[次へ] を選択します。
ダイアログ ボックスで、
MyFirstVisualizer
名を入力し、[ 作成] を選択します。
ビジュアライザー プロジェクトでは、.NET ではなく .NET Framework クラス ライブラリを選択してください。 ビジュアライザーは .NET Framework である必要がありますが、呼び出し元のアプリは .NET にすることができます。
クラス ライブラリを作成したら、そこで定義されているクラスを使用できるように、 Microsoft.VisualStudio.DebuggerVisualizers.DLL
ファイルへの参照を追加する必要があります。 参照を追加する前に、一部のクラスの名前をわかりやすい名前に変更する必要があります。
Class1.csの名前を変更し、Microsoft.VisualStudio.DebuggerVisualizers を追加する
ソリューション エクスプローラーでClass1.cs右クリックし、コンテキスト メニューの [名前の変更] を選択します。
名前を Class1.cs から意味のあるもの (DebuggerSide.cs など) に変更します。
注
Visual Studio では、新しいファイル名と一致するように、DebuggerSide.csのクラス宣言が自動的に変更されます。 アクションを完了するためのプロンプトが表示されたら、[ はい] を選択します。
ソリューション エクスプローラーで、[参照] を右クリックし、ショートカット メニューの [参照の追加] を選択します。
[ 参照の追加 ] ダイアログ ボックスの [ 参照 ] タブで[ 参照 ] を選択し、Microsoft.VisualStudio.DebuggerVisualizers.DLLを見つけます。
DLL は、Visual Studio のインストール ディレクトリの <Visual Studio インストール ディレクトリ>\Common7\IDE\PublicAssemblies サブディレクトリにあります。
[OK] を選択.
DebuggerSide.csで、
using
ディレクティブに次のコードを追加します。using Microsoft.VisualStudio.DebuggerVisualizers;
これで、デバッガー側のコードを作成する準備ができました。 このコードはデバッガー内で実行され、視覚化する情報が表示されます。 最初に、基底クラスDialogDebuggerVisualizer
からの継承を構成するには、DebuggerSide
オブジェクトの宣言を変更する必要があります。
DialogDebuggerVisualizer から継承する
DebuggerSide.csで、次のコード行に移動します。
public class DebuggerSide
コードを次のように変更します:
public class DebuggerSide : DialogDebuggerVisualizer
ビジュアライザー コンポーネント間の通信に使用されるシリアル化ポリシーを基底クラスのコンストラクターに渡すことができるように、空のコンストラクターを追加します。
public DebuggerSide() : base(FormatterPolicy.NewtonsoftJson) // or FormatterPolicy.Json { }
注
Visual Studio 2022 バージョン 17.11 以降では、 .NET 5.0 以降のデバッガー側の特別な考慮事項で説明されているセキュリティの問題により、ビジュアライザーは
Legacy
フォーマッタ ポリシーを指定できません。DialogDebuggerVisualizer
には、オーバーライドする必要がある 1 つの抽象メソッド (Show
) があります。
DialogDebuggerVisualizer.Show メソッドをオーバーライドする
public class DebuggerSide
で、次のメソッドを追加します。
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
}
Show
メソッドには、ビジュアライザー ダイアログ ボックスまたはその他のユーザー インターフェイスを実際に作成し、デバッガーからビジュアライザーに渡された情報を表示するコードが含まれています。 ダイアログ ボックスを作成し、情報を表示するコードを追加する必要があります。 このチュートリアルでは、Windows フォーム のメッセージ ボックスを使用します。 最初に、System.Windows.Forms の参照ディレクティブと using
ディレクティブを追加する必要があります。
System.Windows.Forms の追加
ソリューション エクスプローラーで、[参照] を右クリックし、ショートカット メニューの [参照の追加] を選択します。
[ 参照の追加 ] ダイアログ ボックスの [ 参照 ] タブで[ 参照] を選択し、System.Windows.Forms.DLLを見つけます。
DLL は C:\Windows\Microsoft.NET\Framework\v4.0.30319 にあります。
[OK] を選択.
DebuggerSide.csで、
using
ディレクティブに次のコードを追加します。using System.Windows.Forms;
次に、ビジュアライザーのユーザー インターフェイスを作成して表示するコードをいくつか追加します。 このサンプルは最初のビジュアライザーであるため、ユーザー インターフェイスをシンプルに保ち、メッセージ ボックスを使用できます。
ダイアログ ボックスにビジュアライザーの出力を表示する
Show
メソッドで、次のコード行を追加します。MessageBox.Show(objectProvider.GetObject().ToString());
このコード例には、エラー処理は含まれません。 実際のビジュアライザーまたはその他の種類のアプリケーションにエラー処理を含める必要があります。
[ ビルド ] メニューの [ Build MyFirstVisualizer] を選択します。 プロジェクトが正常に構築されるはずです。 続行する前に、ビルド エラーを修正してください。
デバッガー側のコードが完成しました。 ただし、もう 1 つの手順があります。ビジュアライザーを構成するクラスのコレクションをデバッグ対象側に指示する属性。
デバッグ対象側コードの視覚化する型を追加する
デバッガー側のコードでは、 DebuggerVisualizerAttribute 属性を使用して、デバッグ対象の視覚化する型 (オブジェクト ソース) を指定します。
Target
プロパティは、視覚化する型を設定します。
using
ディレクティブの後、namespace MyFirstVisualizer
の前に、次の属性コードをDebuggerSide.csに追加します。[assembly:System.Diagnostics.DebuggerVisualizer( typeof(MyFirstVisualizer.DebuggerSide), typeof(VisualizerObjectSource), Target = typeof(System.String), Description = "My First Visualizer")]
[ ビルド ] メニューの [ Build MyFirstVisualizer] を選択します。 プロジェクトが正常に構築されるはずです。 続行する前に、ビルド エラーを修正してください。
この時点で、最初のビジュアライザーが完成します。 手順に正しく従っている場合は、ビジュアライザーをビルドして Visual Studio にインストールできます。 ただし、Visual Studio にビジュアライザーをインストールする前に、それをテストして正しく動作することを確認する必要があります。 Visual Studio にビジュアライザーをインストールせずに実行するテスト ハーネスを作成しました。
ビジュアライザーを表示するテスト メソッドを追加する
クラス
public DebuggerSide
に次のメソッドを追加します。public static void TestShowVisualizer(object objectToVisualize) { VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide)); visualizerHost.ShowVisualizer(); }
[ ビルド ] メニューの [ Build MyFirstVisualizer] を選択します。 プロジェクトが正常に構築されるはずです。 続行する前に、ビルド エラーを修正してください。
次に、ビジュアライザー DLL を呼び出す実行可能プロジェクトを作成する必要があります。 わかりやすくするために、コンソール アプリケーション プロジェクトを使用します。
コンソール アプリケーション プロジェクトをソリューションに追加する
ソリューション エクスプローラーで、ソリューションを右クリックし、[ 追加] を選択し、[ 新しいプロジェクト] を選択します。
[ ファイル>新規作成>プロジェクト] を選択します。 言語ドロップダウンで、[ C#] を選択します。 検索ボックスに「 コンソール アプリ」と入力し、 コンソール アプリ (.NET Framework) または .NET 用 コンソール アプリケーション を選択します。 [次へ] を選択します。 表示されたダイアログ ボックスで、
MyTestConsole
名前を入力し、[ 作成] を選択します。
注
テスト ハーネスを使用してビジュアライザーを簡単にテストする場合は、.NET Framework コンソール アプリを作成します。 代わりに .NET コンソール アプリを作成できますが、後で説明するテスト ハーネスは .NET ではまだサポートされていないため、ビジュアライザーをインストールしてテストする必要があります。 .NET コンソール アプリの場合は、まずここでコンソール アプリを作成し、必要な DLL とプロジェクト参照を追加してから、「 デバッグ対象側データ オブジェクトの追加」で説明されている手順に従います。 ASP.NET コア シナリオについては、「 .NET 5.0 以降のデバッガー側の特別な考慮事項」を参照してください。
ここで、MyTestConsole が MyFirstVisualizer を呼び出すことができるように、必要な参照を追加する必要があります。
MyTestConsole に必要な参照を追加する
ソリューション エクスプローラーで、MyTestConsole を右クリックし、ショートカット メニューの [参照の追加] を選択します。
[ 参照の追加 ] ダイアログ ボックスで、[ 参照 ] タブを開き、Microsoft.VisualStudio.DebuggerVisualizers.DLLを選択します。
[OK] を選択.
MyTestConsole を右クリックし、[参照の追加] をもう一度選択します。
[ 参照の追加 ] ダイアログ ボックスで、[ プロジェクト ] タブを開き、[MyFirstVisualizer] を選択します。
[OK] を選択.
次に、テスト ハーネスを終了するコードを追加します。
MyTestConsole にコードを追加する
ソリューション エクスプローラーで、Program.cs右クリックし、ショートカット メニューの [名前の変更] を選択します。
名前をProgram.csから、TestConsole.csなど、より意味のあるものに編集します。
注
Visual Studio では、新しいファイル名と一致するように、TestConsole.csのクラス宣言が自動的に変更されます。
TestConsole.csで、次のコードを
using
ディレクティブに追加します。using MyFirstVisualizer;
メソッド
Main
で、次のコードを追加します。String myString = "Hello, World"; DebuggerSide.TestShowVisualizer(myString);
これで、最初のビジュアライザーをテストする準備ができました。
ビジュアライザーをテストする
ソリューション エクスプローラーでMyTestConsole を右クリックし、ショートカット メニューの [スタートアップ プロジェクトとして設定] を選択します。
[ デバッグ ] メニューの [ スタート] を選択します。
コンソール アプリケーションが起動し、ビジュアライザーが表示され、"Hello, World" という文字列が表示されます。
お疲れさまでした。 最初のビジュアライザーをビルドしてテストしました。
単にテスト ハーネスから呼び出すのではなく、Visual Studio でビジュアライザーを使用する場合は、インストールする必要があります。 詳細については、「 方法: ビジュアライザーをインストールする」を参照してください。
デバッグ対象側のデータ オブジェクトを追加する
このセクションでは、 System.String
データ オブジェクトからカスタム データ オブジェクトに切り替えます。
ソリューション エクスプローラーで、ソリューションを右クリックし、[ 追加] を選択し、[ 新しいプロジェクト] を選択します。 言語ドロップダウンで、[ C#] を選択します。 検索ボックスに クラス ライブラリを入力し、.NET Standard の クラス ライブラリ (.NET Framework) または クラス ライブラリ を選択します。
注
.NET Framework テスト コンソール アプリを使用している場合は、必ず .NET Framework クラス ライブラリ プロジェクトを作成してください。
[次へ] を選択します。 表示されたダイアログ ボックスで、
MyDataObject
名前を入力し、[ 作成] を選択します。(.NET Standard クラス ライブラリのみ)ソリューション エクスプローラーで、プロジェクトを右クリックし、[ プロジェクト ファイルの編集] を選択します。
<TargetFramework>
の値をnetstandard2.0
に変更します。<TargetFramework>netstandard2.0</TargetFramework>
MyDataObject
名前空間内で、既定のコードを次のコードに置き換えます。[Serializable] public class CustomDataObject { public CustomDataObject() { this.MyData = "MyTestData"; } public string MyData { get; set; } }
この例のような読み取り専用ビジュアライザーの場合、 VisualizerObjectSource のメソッドを実装する必要はありません。
次に、新しいデータ オブジェクトを使用するように MyFirstVisualizer プロジェクトを更新します。
ソリューション エクスプローラーの MyFirstVisualizer プロジェクトで、[ 参照 ] ノードを右クリックし、[ 参照の追加] を選択します。
[ プロジェクト] で、 MyDataObject プロジェクトを選択します。
DebuggerSide.csの属性コードで、ターゲット値を更新し、
System.String
をMyDataObject.CustomDataObject
に変更します。Target = typeof(MyDataObject.CustomDataObject),
MyFirstVisualizer プロジェクトで、
Show
メソッドのコードを次のコードに置き換えます。var data = objectProvider.GetObject() as MyDataObject.CustomDataObject; // You can replace displayForm with your own custom Form or Control. Form displayForm = new Form(); displayForm.Text = data.MyData; windowService.ShowDialog(displayForm);
上記のコードでは、データ オブジェクトのプロパティを使用してフォームのタイトルに表示します。
次に、カスタム データ オブジェクトを使用するようにコンソール アプリを更新します。
MyTestConsole プロジェクトのソリューション エクスプローラーで、[ 参照 ] または [依存関係 ] ノードを右クリックし、プロジェクト参照を
MyDataObject
に追加します。Program.csで、
Main
メソッドのコードを次のコードに置き換えます。// String myString = "Hello, World"; CustomDataObject customDataObject = new CustomDataObject(); DebuggerSide.TestShowVisualizer(customDataObject);
(.NET コンソール アプリ)テスト ハーネスはサポートされていないため、
TestShowVisualizer
の呼び出しを try-catch ステートメントで囲みます。try { DebuggerSide.TestShowVisualizer(customDataObject); } catch (Exception) { }
コンソール アプリには、ビジュアライザーへのランタイム参照が必要です。 前のコードをコメントアウトせずに保持することで、参照を維持できます。
.NET Framework コンソール アプリの場合は、テスト ハーネスを実行するか ( F5 キーを押します)、「 方法: ビジュアライザーをインストールする」の手順に従うことができます。
テスト ハーネスを使用してアプリを実行すると、アプリに Windows フォームが表示されます。
.NET コンソール アプリの場合は、「方法: ビジュアライザーをインストールする」で説明されているフォルダーに
MyFirstVisualizer.dll
とMyDataObject.dll
をコピーします。ビジュアライザーをインストールした後、ブレークポイントを設定し、コンソール アプリを実行して、
customDataObject
上にマウス ポインターを置きます。 すべてが正しく設定されている場合は、虫眼鏡アイコンが表示されます。
虫眼鏡から MyFirstVisualizer を選択すると、タイトルにデータ オブジェクト テキストが含まれるフォームが表示されます。