2011-01-22 27 views
3

我一直在試圖爲linq Expression構建一個調試器可視化器。調試器可視化器[Visual Studio 2010] - System.Linq.Expressions.Expression - 不顯示放大鏡

我知道一個已經存在,但我想創建我自己的並添加額外的功能。

我做了這個快速原型。 放大鏡不會顯示;但是,如果我將一行代碼更改爲「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 2011-01-23 17:40:01

0

試試這一個VB:

Target = GetType(Expression(Of)) 

或者這一個C#:

Target = typeof(Expression<>) 
相關問題