6

TL; DR
Visual Studio 2012用のデバッグビジュアライザーをC#で記述してIEnumerable<string>string[]または同様のオブジェクトを視覚化できるようにする方法を知っている人はいますか?

詳細
VisualStudioDebug Visualizerは素晴らしいです、そして私はいくつかの人気のあるもの(Mole)を定期的に使用しています。しかし、今やいくつかのカスタムビジュアライザーを展開する時が来ました。文字列の単純なビジュアライザーから始めました。

[assembly: System.Diagnostics.DebuggerVisualizer(typeof(My.Namespace.DebuggerSide),
                                            typeof(VisualizerObjectSource),
                                            Target = typeof(string),
                                            Description = "Awesome Visualizer")]

DebuggerSideのコードは、基本的にテンプレートの例です。

public class DebuggerSide : DialogDebuggerVisualizer
{
    protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
    {
        if (windowService == null)
            throw new ArgumentNullException("windowService");
        if (objectProvider == null)
            throw new ArgumentNullException("objectProvider");


        var data = (string)objectProvider.GetObject();

        using (var displayForm = new VisualizerForm(data))
        {
            windowService.ShowDialog(displayForm);
        }
    }

    /// <summary>
    /// Tests the visualizer by hosting it outside of the debugger.
    /// </summary>
    /// <param name="objectToVisualize">The object to display in the visualizer.</param>
    public static void TestShowVisualizer(object objectToVisualize)
    {
        VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide));
        visualizerHost.ShowVisualizer();
    }
}

VisualizerFormは、追加のコントロールなどを備えたカスタムフォームです...プロジェクトをビルドしてdllをMy Documents/Visual Studio 11/Visualizersフォルダーに配置し、Visual Studioを再起動すると、文字列オブジェクトのブレークポイントにヒットしたときに、外観のガラスアイコンの下にデバッガーが表示されます。 。ウーフー!ここまでは順調ですね。

stringここで、視覚化する代わりに、視覚化string[]またはIEnumerable<string>同様のオブジェクトを作成したいと思います。ただし、アセンブリ属性をに変更するとIEnumerable<string>、これは機能せず、IEnumerableオブジェクトに表示されるガラスアイコンすら表示されません。

UPDATE
TargetTypeをに変更し、List<>にキャストできるかどうかを確認することで、動作させることができList<string>ます。ただし、これは、デバッグしたいすべてのオブジェクトをキャストする必要Listがあり、使用できない、IEnumerable<>またはstring[]を使用できないことを意味します。

4

2 に答える 2

1

ビジュアライザーは次のように文書化されています

ジェネリック型のサポートは制限されています。ジェネリック型がオープン型である場合にのみ、ジェネリック型であるターゲットのビジュアライザーを作成できます。

つまり、のような閉じた構築型を使用するビジュアライザーを作成することはできませんIEnumerable<string>

ターゲットタイプをに設定してからIEnumerable<>、要素がタイプであるかどうかを確認してみましたstringか?

于 2012-08-28T15:23:36.627 に答える
1

ここの「デバッガービジュアライザーを持つことができるオブジェクト」セクションを参照してください: https ://rapiddevbookcode.codeplex.com/wikipage?title = EnumerableDebugVisualizer

My Enumerable Debugger Visualizerは、基になる具象型がIEnumerableに登録されている場合、IEnumerableで動作します。登録コードを調べて、動作させることができます。

于 2014-02-07T10:32:06.430 に答える