我为Visual Studio开发调试器可视化工具已经有一段时间了,虽然实际的可视化工具工作得很好。问题是,当检查一个变量时,它总是把自己放在可视化工具列表的顶部,这真的让一些宁愿将文本作为顶部变量的用户感到恼火(因为当打开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);
}
}
}
有没有人知道这是否有可能影响可视化工具的顺序,或者我应该让它这样做?
发布于 2013-09-19 01:22:15
我不认为有一个解决方案。但是有一个变通方法:
定义您自己的文本可视化工具,并将适当的DebuggerVisualizer
属性放在JsonVisualizer
的属性之前。结果是字符串在默认情况下是可读的,并且可以选择Json Visualizer。一个带有多行文本框的窗口并不需要太多的工作。
可能甚至不需要编写可视化工具。应该可以使用内部的,但是我不知道它的名字(Which class is used for "Text Visualizer"?)。
发布于 2013-09-14 08:14:28
根据设计,它总是最先出现的。幕后演员已经找到了它所反映的变量的最佳匹配。
但是,您可以做以下两件事中的任何一件。你可以让可视化工具只在字符串包含':‘时出现,或者你可以使用反射来重新排序可视化工具,方法是按照你想要的顺序将它们添加到集合的末尾,然后从集合中删除原始内容。对于后者,您很可能需要将集合从只读更改为可写。通过反射。
除了你的成功意志之外,没有其他可靠的来源可以借鉴。
发布于 2013-09-15 07:28:11
我猜VS“在幕后”可以很容易地区分字符串类型和xml类型,但Xml也只是一个字符串,所以这里的一个关键问题是,VS如何区分两者?
你能仔细分析一下VS XML可视化工具,看看它是如何工作的吗(即使你必须使用DLL上的反射器来做这件事,你也可以看到解决它的方法)
https://stackoverflow.com/questions/18459882
复制相似问题