我一直在尝试为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();
}
}
}发布于 2011-01-24 01:29:55
对于将来阅读这篇文章的任何人来说,我发现了问题的根源。调试器可视化工具的目标类型必须是运行时类型,而不是继承类型。
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发布于 2011-10-18 18:12:17
在VB:上试试这个
Target = GetType(Expression(Of ))或者这个是C#的:
Target = typeof(Expression<>)https://stackoverflow.com/questions/4769252
复制相似问题