我一直在为Visual Studio调试器可视化器工作一段时间,而实际的可视化工作正常。问题是它在检查一个变量时总是将自己置于可视化列表的顶部,这个变量真的让一些用户更喜欢Text作为最顶层的用户(因为在打开VS时,前者也是默认值)。
我在DialogDebuggerVisualizer或DebuggerVisualizerAttribute上找不到任何支持,这是我的第一个想法所以我一直在搜索SO / MSDN / Google,了解如何影响排序顺序可视化器(最好将我的最后一个放在列表中),但无济于事。
下面是我如何注册我的可视化工具,然后它只显示一个基于可视化值的表单。
using Microsoft.VisualStudio.DebuggerVisualizers;
[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(Shorthand.VSAddins.JsonVisualizer.JsonVisualizer),
typeof(VisualizerObjectSource),
Target = typeof(string),
Description = "Json Visualizer")]
namespace Shorthand.VSAddins.JsonVisualizer
{
public class JsonVisualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
var json = objectProvider.GetObject() as string;
var form = new VisualizerForm { Json = json };
windowService.ShowDialog(form);
}
}
}
有没有人知道是否可能影响可视化工具的顺序,还是应该让它成为现实?
答案 0 :(得分:2)
我认为没有解决方案。但有一个解决方法:
定义您自己的Text Visualizer,并在DebuggerVisualizer
的属性之前添加适当的JsonVisualizer
属性。结果是默认情况下该字符串是可读的,并且可以选择Json Visualizer。具有多行文本框的窗口不是太多工作。
甚至可能不需要编写可视化工具。应该可以使用内部的,但我不知道它的名字(Which class is used for "Text Visualizer"?)。
答案 1 :(得分:0)
它总是首先出现在设计中。引擎盖下的演员已经找到了它所反映的变量的最佳匹配。
但是,你可以做两件事。只有当sting包含':'时才能显示可视化工具 或者,您可以使用反射对可视化工具进行重新排序,方法是按照您想要的顺序将它们添加到集合的末尾,然后从集合中删除原件。 对于后者,您很可能必须将集合从只读更改为可写。通过反思。除了你的成功意愿之外,没有可靠的消息来源。
答案 2 :(得分:0)
我猜VS'引擎盖'可以很容易区分字符串的类型和xml的类型,但Xml也只是一个字符串,所以这里的一个关键问题是,VS如何区分两者之间的区别?
您是否可以剖析VS XML可视化工具以查看它是如何工作的(即使您必须在DLL上使用反射器来执行此操作,您可能会看到实现它的方法)