2011-01-22 26 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<>) 
相关问题