2011-01-22 19 views
3

私はlinq式のデバッガビジュアライザをビルドしようとしています。デバッガビジュアライザ[Visual Studio 2010] - System.Linq.Expressions.Expression - 拡大鏡が表示されない

すでに存在していますが、自分で作成して追加機能を追加したいと思います。

私はこのクイックプロトタイプを作った。 拡大鏡が表示されません。ただし、コードの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(); 
     } 
    } 
} 

答えて

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 
+1

おそらく、あなたは複数のターゲットを適用することができますか? – leppie

+0

Ya、回避するには、すべての継承型の属性を作成することですが、まだ理想的なソリューションではありません。 – BSick7

0

C#のためVB:

Target = GetType(Expression(Of)) 

それとも、この1のためにこれを試してください。

Target = typeof(Expression<>) 
関連する問題