具有DebuggerDisplay属性的DataTable后代丢失了DebuggerVisualizer

时间:2009-10-12 15:03:49

标签: c# datatable visualizer debuggerdisplay

我有一个DataTable的后代,它定义了DebuggerDisplay属性。添加DebuggerDisplay属性时,将删除DataTable的默认可视化工具。如果我删除DebuggerDisplay属性,DataTable可视化器将返回。我想要默认的DataTable可视化工具和我对DebuggerDisplay的覆盖。

你们知道如何让它发挥作用吗?

    //does not work
//[DebuggerVisualizer("Microsoft.VisualStudio.Debugger.DataSetVisualizer", typeof(DataTable))]

//DebuggerDisplay attribute removes DataTable visualizer. Odd behavior to me.
[DebuggerDisplay("{TableName}, Count = {Rows.Count}, {GetColumnNames()}")] 
public class MyTable<T> : DataTable where T : class{}

1 个答案:

答案 0 :(得分:2)

为了澄清,我不知道为什么导出和指定不同的属性会禁用可视化工具。

我尝试了类似的东西,没有什么能阻止你将DebuggerDisplayDebuggerVisualizer应用于某个类型。下图显示了两个,左侧圆圈是调试器可视化器,右侧圆圈是调试器显示器:

Debugger Display and Visualizer both visible

但是,在您的课程中尝试使用DataSetVisualizer类型时可能会遇到问题。 jiggery-pokery花费了很多次,但最终我的课程定义如下:

[Serializable]
[DebuggerVisualizer(typeof(EnhancedDataSetVisualizer.DataSetVisualizer), 
                    typeof(EnhancedDataSetVisualizer.DataSetVisualizerSource))]
[DebuggerDisplay("{Name}")]
public sealed class SpecFlowTableWrapper : DataSet
{
    // Body omitted, not important.
}

我经常不得不改变我在DebuggerVisualizer中指定的参数。事实证明,缺少的部分是指定VisualizerObjectSource

然后我得到显示我的数据集名称的调试器显示,当我点击放大镜时,它会加载DataSetVisualizer

所有这一切的重要部分是两个参考:

  • Microsoft.VisualStudio.Debugger.DataSetVisualizer

这包含DataSetVisualizerDataSetVisualizerSource类型。

  • Microsoft.VisualStudio.DebuggerVisualizers

这是另一个参考的依赖。

第二项通常在Visual Studio的“添加引用...”对话框中可用,但是第一项可以在VS安装目录中找到。

对我来说(VS版本可能会有所不同):

  

C:\ Program Files(x86)\ Microsoft Visual Studio   10.0 \ Common7 \软件包\调试\展示台\

调用:

  

Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll

确保“复制本地”对于第一个参考也是如此(无论如何它应该是默认的)。请注意,对于调试,此引用现在是一个依赖项,因此您需要确保它在您正在调试的任何项目的工作目录中,否则会出现VS调试器错误。

重新构建,启动调试器,享受。对不起,已经晚了2年。