AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

Visual Studioのビジュアライザをc#で開発してみる

今日はやけに小物作りが栄えてます。その中でビジュアライザの開発をしてみたので、VisualStudioプラグイン開発系列に興味があるかたは是非触ってみるといいと思います。

ビジュアライザとは


f:id:kamiyaowl:20140401223154p:plain

VSでデバッグをしていれば誰しも見かけたことがあるであろうコイツの事です。正直標準で入っている奴の使い勝手はいまいち過ぎますけど

実はこれ自作できます。

作りました

f:id:kamiyaowl:20140401223454p:plain

Uriに入ってるパスやUrlを開くだけのシンプルなもの。地味に欲しかったんですよね

kamiyaowl/UriVisualizer · GitHub

使い方

dll/UriVisualizer.dllC:\Users\<UserName>\Documents\Visual Studio 2013\Visualizersに入れるだけでおk。簡単ですね。

なんだか調べても解説しているところがMS公式ぐらいしかなかったので珍しく解説記事を書いてみます。

つくりかた


プロジェクトを作成する

f:id:kamiyaowl:20140401223916p:plain

クラスライブラリにします。続いて参照の追加で

f:id:kamiyaowl:20140401224018p:plain

追加します。

追加したdllのusingを追加すればあとは優秀なIntellisenceが仕事をしてくれます。

using Microsoft.VisualStudio.DebuggerVisualizers;

実装する

Class1って名前ではダサいので適当に名前を変え、DialogDebuggerVisualizerを継承させます。

void Show(IDialogVisualizerService,IVisualizerObjectProvider)

を実装させます。コードを見て分かる通り第二引数の.GetObject()でVisualStudioから投げられた対象のオブジェクトが拾えます*1

中に適当な処理*2を書いて実装は終了です。

ついでにテストできるようにテストメソッドを追加しておきます。

おまじない

VisualStudioが呼び出せるよう情報をusing~namespace間に書き足します。

ここまでやってこんな感じになります。

f:id:kamiyaowl:20140401224946p:plain

わからなければソース読んでください、ソース

UriVisualizer/UriVisualizer/UriVisualizerDebugger.cs at master · kamiyaowl/UriVisualizer · GitHub

テストしてみる

実際に動かしてみたいので別プロジェクトから呼んでみます。

ソリューションを右クリックしてコンソールアプリケーションのプロジェクトを追加、参照のソリューションからさっき作ったとおぼしきプロジェクトを追加します。

f:id:kamiyaowl:20140401225241p:plain

あとは作ったことすら忘れてしまっているかもしれないテストメソッドにデータを投げてあげればVisualStudioを経由せずに動作テストできます。

UriVisualizer/VisualizerTest/Program.cs at master · kamiyaowl/UriVisualizer · GitHub

実行できない時はコンソールアプリケーションを右クリックしてスタートアッププロジェクトに追加しましょう

まぁ動けば完成、dllを指定場所に突っ込めばVisualStudioでデバッグするときに使えます。

ここまでの流れがとても簡単かつデバッグの助けになるので、自作クラスでテスト・デバッグ用にクソみたいなコードを書くのがだるいのであればこのようなツールを検討してみるのもいいかもしれません。

*1:本来であればキャストしたりきちんと処理しましょう

*2:参照にFormsやWPF関連のものを追加してウインドウを出したりすることももちろんできます