【问题标题】:DataTable descendant with DebuggerDisplay attribute loses DebuggerVisualizer具有 DebuggerDisplay 属性的 DataTable 后代丢失 DebuggerVisualizer
【发布时间】:2009-10-12 15:03:48
【问题描述】:

我有一个定义了 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{}

【问题讨论】:

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

标签: c# datatable visualizer debuggerdisplay


【解决方案1】:

澄清一下,我不知道为什么派生和指定不同的属性会禁用可视化工具。

我尝试过类似的方法,没有什么能阻止您将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

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

重新构建,启动调试器,尽情享受吧。抱歉迟到了 2 年。

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2019-08-29
    • 2012-11-04
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多