50

我一直在为 Visual Studio 开发调试器可视化工具一段时间,而实际的可视化工具工作正常。问题在于,当检查一个变量时,它总是将自己置于可视化列表的顶部,这确实让一些宁愿将 Text 作为顶部的用户感到恼火(因为在打开 VS 时顶部也是默认值)。

在此处输入图像描述

我在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);
        }
    }
}

有谁知道是否有可能影响可视化工具的顺序,还是我应该让它发生?

4

3 回答 3

2

我不认为有解决办法。但是有一个解决方法:

定义您自己的 Text Visualizer 并将适当DebuggerVisualizer的属性放在JsonVisualizer. 结果将是默认情况下可以读取字符串,并且可以选择 Json Visualizer。带有多行文本框的窗口不是太多工作。

甚至可能不需要编写可视化工具。应该可以使用内部的,但我不知道它的名称(哪个类用于“文本可视化器”?)。

于 2013-09-18T17:22:14.573 回答
0

我猜 VS 'under the hood' 可以很容易地区分字符串类型和 xml 类型,但 Xml 也只是一个字符串,所以这里的一个关键问题是,VS 如何区分两者?

您能否剖析 VS XML 可视化器以了解它是如何工作的(即使您必须在 DLL 上使用反射器来执行此操作,您也可能会看到解决它的方法)

于 2013-09-14T23:28:10.737 回答
0

按照设计,它总是首先出现。引擎盖下的演员已经找到了它所反映的变量的最佳匹配。

但是,您可以做两件事中的任何一件。您可以使可视化器仅在字符串包含“:”时出现,或者您可以使用反射来重新排序可视化器,方法是按照您想要的顺序将它们添加到集合的末尾,然后从集合中删除原件。对于后者,您很可能必须将集合从只读更改为可写。通过反射。

除了你成功的意愿之外,没有可靠的来源可以利用。

于 2013-09-14T00:14:27.500 回答