哪些类型阻止Visual Studio可视化工具显示?

时间:2017-12-18 09:02:38

标签: c# vb.net visual-studio visual-studio-2017 debuggervisualizer

我发现DebuggerVisualizerAttribute中出现的某些类型会阻止显示所有可视化工具。它们不仅存在于其中,而且除了最通用的(Text,XML,JSON,HTML)之外。甚至DataTable可视化工具也被阻止了。到目前为止,我已经确定了SortedList<int,string>DataRow[](Datarow数组)和许多其他人。

我需要从生成的类型列表中排除这些类型(用于可视化界面)。我没有设法得到任何错误消息(调试输出,ActivityLog.xml,调试Visual Studio与其他实例,WinDbg未经过测试)。

重现行为的步骤

我使用VS2017,.NET 4.7.1,W 10 x64 EN(我没有注意到VS2012,.NET 4.5 W 7上的问题,但它在VS2015中被复制)

  1. 为字符串创建调试器可视化工具并对其进行测试(例如 Walkthrough: Writing a Visualizer in C#Walkthrough: Writing a Visualizer in Visual Basic但可能是其他任何可视化工具 会这样做)
  2. 安装可视化工具(复制到 My Documents \ VisualStudioVersion \ Visualizers - How to: Install a Visualizer
  3. 在Visual Studio中开始调试并检查是否已创建 提供可视化器(我建议也检查存在 DataTable的放大镜)
  4. 将以下属性之一添加到可视化器代码中:
  5. [assembly: System.Diagnostics.DebuggerVisualizer(typeof(MyFirstVisualizer.DebuggerSide), typeof(VisualizerObjectSource), Description = "Failing1",
            Target = typeof(System.Collections.Generic.SortedList<int, string>))]
    [assembly: System.Diagnostics.DebuggerVisualizer(typeof(MyFirstVisualizer.DebuggerSide), typeof(VisualizerObjectSource), Description = "Failing2",
            Target = typeof(System.Data.DataRow[]))]
    

    或vb.net

    <Assembly: System.Diagnostics.DebuggerVisualizer(GetType(MyFirstVisualizer.DebuggerSide), GetType(VisualizerObjectSource), Description:="Failing1",
           Target:=GetType(System.Collections.Generic.SortedList(Of Integer, String)))>
    <Assembly: System.Diagnostics.DebuggerVisualizer(GetType(MyFirstVisualizer.DebuggerSide), GetType(VisualizerObjectSource), Description:="Failing2",
           Target:=GetType(System.Data.DataRow()))>
    
    1. 安装修改后的可视化工具并测试它是否未提供 缺少DataTable的magifying glass(必须重新启动 调试但不是Visual Studio)
    2. 部分解决方案

      我注意到大多数问题类型都是Constructed Generic Types,我通过.IsGenericType.IsConstructedGenericType来排除问题,从而解决了问题。

      我没有将解决方案写成答案,因为Dictionary<int,string>不会导致问题,DataRow[]不是构造的通用类型。

      注释

      • 当选项&gt;调试器&gt;一般&gt;使用托管兼容模式 勾选。这个问题无法再现(txh Hans Passant)。
      • 编辑的问题包括不太模糊的类型和部分解决方案。
      • 我没有管理添加winforms参考net standard dll所以我使用.Net Framework在1中创建可视化工具。
      • 现在向Microsoft报告此问题:Certain types prevent showing all custom Debugger Visualizers

0 个答案:

没有答案