我有一个定义了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{}
最佳答案
只是为了澄清,我不知道为什么派生并指定其他属性会禁用可视化器。
我已经尝试过类似的方法,并且没有什么可以阻止您将DebuggerDisplay
和DebuggerVisualizer
都应用于一种类型。下图显示了两者,左圆圈是调试器可视化器,右圆圈是调试器显示:
但是,在类上尝试使用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
这包含
DataSetVisualizer
和DataSetVisualizerSource
类型。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/