C# 具有DebuggerDisplay属性的DataTable子体将丢失DebuggerVisualizer

C# 具有DebuggerDisplay属性的DataTable子体将丢失DebuggerVisualizer,c#,datatable,visualizer,debuggerdisplay,C#,Datatable,Visualizer,Debuggerdisplay,我有一个定义了DebuggerDisplay属性的DataTable的后代。添加DebuggerDisplay属性时,DataTable的默认可视化工具将被删除。如果删除DebuggerDisplay属性,DataTable可视化工具将返回。我想要默认的DataTable可视化工具和DebuggerDisplay的覆盖 你们知道怎么让它工作吗 //does not work //[DebuggerVisualizer("Microsoft.VisualStudio.Debugger.Da

我有一个定义了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{}
//不起作用
//[调试可视化工具(“Microsoft.VisualStudio.Debugger.DataSetVisualizer”,类型(DataTable))]
//DebuggerDisplay属性删除DataTable可视化工具。我觉得奇怪。
[调试程序显示(“{TableName},Count={Rows.Count},{GetColumnNames()}”)]
公共类MyTable:DataTable,其中T:class{}
我只是想澄清一下,我不知道为什么派生和指定不同的属性会禁用可视化工具

我尝试过类似的方法,但没有什么能阻止您将
DebuggerDisplay
DebuggerVisualizer
应用于类型。下图显示了两者,左圆圈是调试器可视化工具,右圆圈是调试器显示:

但是,尝试在类中使用
DataSetVisualizer
类型可能会遇到问题。这花了很多时间玩jiggery扑克,但我最终为我的班级下了以下定义:

[Serializable]
[DebuggerVisualizer(typeof(EnhancedDataSetVisualizer.DataSetVisualizer), 
                    typeof(EnhancedDataSetVisualizer.DataSetVisualizerSource))]
[DebuggerDisplay("{Name}")]
public sealed class SpecFlowTableWrapper : DataSet
{
    // Body omitted, not important.
}
我经常不得不更改在调试可视化工具中指定的参数。原来我缺少的部分是指定
VisualizerObjectSource

然后,调试器显示了我的数据集名称,当我单击放大镜时,它将加载
DataSetVisualizer

所有这些中的重要部分是两个参考:

  • Microsoft.VisualStudio.Debugger.DataSetVisualizer
其中包含
DataSetVisualizer
DataSetVisualizerSource
类型

  • Microsoft.VisualStudio.DebuggerVisualizers
这是另一个引用的依赖项

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

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

C:\ProgramFiles(x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers\

称为:

Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll

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


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

哦,看来没人能回答这个问题。关闭。有点晚,但已解决:-)