我有一个定义了DebuggerDisplay属性的DataTable的后代。当我添加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{}

最佳答案

只是为了澄清,我不知道为什么派生并指定其他属性会禁用可视化器。

我已经尝试过类似的方法,并且没有什么可以阻止您将DebuggerDisplayDebuggerVisualizer都应用于一种类型。下图显示了两者,左圆圈是调试器可视化器,右圆圈是调试器显示:



但是,在类上尝试使用DataSetVisualizer类型可能会遇到问题。这花了很多时间,但是我最终在课堂上给出了以下定义:

[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 \ Packages \ Debugger \ Visualizers \


称为:


  Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll


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

重新构建,启动调试器,享受。抱歉,晚了2年。

关于c# - 具有DebuggerDisplay属性的DataTable后代会丢失DebuggerVisualizer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1555115/

10-12 14:52