Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试器可视化工具[Visual Studio 2010]-System.Linq.Expressions.Expression-不显示放大镜_Linq_Visual Studio 2010_Debuggervisualizer - Fatal编程技术网

调试器可视化工具[Visual Studio 2010]-System.Linq.Expressions.Expression-不显示放大镜

调试器可视化工具[Visual Studio 2010]-System.Linq.Expressions.Expression-不显示放大镜,linq,visual-studio-2010,debuggervisualizer,Linq,Visual Studio 2010,Debuggervisualizer,我一直在尝试为linq表达式构建一个调试器可视化工具 我知道已经存在一个,但我想创建自己的,并添加其他功能 我做了这个快速原型。 放大镜不会出现;但是,如果我将一行代码更改为“Target=typeof(System.String)”,则会显示放大镜 任何帮助都将不胜感激 using System.IO; using System.Windows.Forms; using Microsoft.VisualStudio.DebuggerVisualizers; [assembly: System

我一直在尝试为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();
        }
    }
}

对于将来阅读这篇文章的人来说,我发现了问题的根源。 调试器可视化工具的目标类型必须是运行时类型,而不是继承的类型

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

VB:

Target = GetType(Expression(Of ))
或者这张是C#:

Target=typeof(表达式)

也许您可以应用多个目标?是的,一个解决方法是为每个继承的类型创建一个属性,但这仍然不是一个理想的解决方案。
Target = typeof(Expression<>)