【问题标题】:Debugger Visualizer [Visual Studio 2010] - System.Linq.Expressions.Expression - not showing magnifying glass调试器可视化工具 [Visual Studio 2010] - System.Linq.Expressions.Expression - 不显示放大镜
【发布时间】:2012-11-09 13:17:51
【问题描述】:

我一直在尝试为 linq 表达式构建调试器可视化工具。

我知道已经存在一个,但我想创建自己的并添加其他功能。

我制作了这个快速原型。 放大镜不会出现;但是,如果我将一行代码更改为“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();
        }
    }
}

【问题讨论】:

    标签: linq visual-studio-2010 debuggervisualizer


    【解决方案1】:

    对于以后阅读本文的任何人,我都发现了问题的根源。 调试器可视化工具的目标类型必须是运行时类型,而不是继承类型。

    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
    

    【讨论】:

    • 也许你可以应用多个目标?
    • 是的,一种解决方法是为每个继承的类型创建一个属性,但这仍然不是一个理想的解决方案。
    【解决方案2】:

    试试这个VB:

    Target = GetType(Expression(Of ))
    

    或者这个用于 C#:

    Target = typeof(Expression<>)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 2011-02-16
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多