如何在Visual Studio中指定调试器可视化器的顺序

时间:2013-08-27 07:50:56

标签: c# visual-studio debuggervisualizer

我一直在为Visual Studio调试器可视化器工作一段时间,而实际的可视化工作正常。问题是它在检查一个变量时总是将自己置于可视化列表的顶部,这个变量真的让一些用户更喜欢Text作为最顶层的用户(因为在打开VS时,前者也是默认值)。

enter image description here

我在DialogDebuggerVisualizerDebuggerVisualizerAttribute上找不到任何支持,这是我的第一个想法所以我一直在搜索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);
        }
    }
}

有没有人知道是否可能影响可视化工具的顺序,还是应该让它成为现实?

3 个答案:

答案 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上使用反射器来执行此操作,您可能会看到实现它的方法)

相关问题