3

私は linq 式のデバッガー ビジュアライザーを構築しようとしています。

既に存在することは知っていますが、独自に作成して機能を追加したいと考えています。

この簡単なプロトタイプを作成しました。虫眼鏡は表示されません。ただし、コードの 1 行を「Target = typeof(System.String)」に変更すると、虫眼鏡が表示されます。

どんな助けでも大歓迎です。

using System.IO;
using System.Windows.Forms;
using Microsoft.VisualStudio.DebuggerVisualizers;

[assembly: System.Diagnostics.DebuggerVisualizer(
    typeof(VisualizerPrototype.MyDebuggerVisualizer),
    typeof(VisualizerPrototype.MyDebuggerVisualizerObjectSource),
    Target = typeof(System.Linq.Expressions.Expression),
    Description = "My Debugger Visualizer")]
namespace VisualizerPrototype
{
    public class MyDebuggerVisualizer : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            var text = string.Empty;
            using (var sr = new StreamReader(objectProvider.GetData()))
            {
                text = sr.ReadToEnd();
            }

            MessageBox.Show(text);
        }
    }

    public class MyDebuggerVisualizerObjectSource : VisualizerObjectSource
    {
        public override void GetData(object target, System.IO.Stream outgoingData)
        {
            var sw = new StreamWriter(outgoingData);
            sw.WriteLine("YO");
            sw.Flush();
        }
    }
}
4

2 に答える 2

2

将来これを読む人のために、私は自分の問題の原因を発見しました。デバッガー ビジュアライザーのターゲットの型は、継承された型ではなく、実行時の型である必要があります。

Target = typeof(System.Linq.Expressions.ConstantExpression)
Expression expr = Expression.Constant(1); //visualizer shows up

Target = typeof(System.Linq.Expressions.Expression)
Expression expr = Expression.Constant(1); //visualizer doesn't show up
于 2011-01-23T17:29:54.643 に答える
0

これを試してみてくださいVB:

Target = GetType(Expression(Of ))

または、C# の場合:

Target = typeof(Expression<>)
于 2011-10-18T10:12:17.117 に答える