TL;DR
有谁知道如何用 C# 为 Visual Studio 2012 编写调试可视化工具,以便我可以可视化IEnumerable<string>
或string[]
类似的对象?
更多信息
Visual Studio Debug Visualizer 很棒,我经常使用一些流行的 ( Mole )。但是,现在是推出一些自定义可视化工具的时候了。我从一个简单的字符串可视化器开始:
[assembly: System.Diagnostics.DebuggerVisualizer(typeof(My.Namespace.DebuggerSide),
typeof(VisualizerObjectSource),
Target = typeof(string),
Description = "Awesome Visualizer")]
DebuggerSide 的代码基本上是模板中的示例:
public class DebuggerSide : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
if (windowService == null)
throw new ArgumentNullException("windowService");
if (objectProvider == null)
throw new ArgumentNullException("objectProvider");
var data = (string)objectProvider.GetObject();
using (var displayForm = new VisualizerForm(data))
{
windowService.ShowDialog(displayForm);
}
}
/// <summary>
/// Tests the visualizer by hosting it outside of the debugger.
/// </summary>
/// <param name="objectToVisualize">The object to display in the visualizer.</param>
public static void TestShowVisualizer(object objectToVisualize)
{
VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide));
visualizerHost.ShowVisualizer();
}
}
VisualizerForm
是带有额外控件等的自定义表单...当我构建项目并将 dll 放入My Documents/Visual Studio 11/Visualizers
文件夹中并重新启动 Visual Studio 时,当为字符串对象命中断点时,我确实可以看到调试器出现在镜子图标下. 呜呼!到目前为止,一切都很好。
现在我想,而不是可视化string
,可视化string[]
或IEnumerable<string>
类似的对象。但是,当我将程序集属性更改为 时IEnumerable<string>
,这不起作用,IEnumerable 对象上什至没有显示玻璃图标。
更新
我可以通过将 TargetType 更改为List<>
然后检查是否可以转换为List<string>
. 但是,这意味着我必须将我想要调试的所有对象都转换为List
并且不能使用IEnumerable<>
或 string[]