Потомок DataTable с атрибутом DebuggerDisplay теряет DebuggerVisualizer

У меня есть потомок DataTable, для которого определен атрибут DebuggerDisplay. Визуализатор по умолчанию для DataTable удаляется, когда я добавляю атрибут DebuggerDisplay. Если я удалю атрибут 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{}

person Steve    schedule 12.10.2009    source источник
comment
да ладно, похоже, никто не может ответить на это. закрыто.   -  person Steve    schedule 13.10.2009
comment
Немного поздно, но решено :-)   -  person Adam Houldsworth    schedule 23.08.2012


Ответы (1)


Просто поясню: я понятия не имею, почему получение и указание другого атрибута отключает визуализатор.

Я пробовал что-то подобное, и ничто не мешает вам применить к типу как 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

Убедитесь, что «Копировать локально» верно и для первой ссылки (в любом случае, по умолчанию оно должно быть правдой). Обратите внимание, что для отладки эта ссылка теперь является зависимостью, поэтому вам нужно убедиться, что она находится в рабочем каталоге любого проекта, который вы отлаживаете, иначе вы получите ошибки отладчика VS.

Пересоберите, запустите отладчик, наслаждайтесь. Жаль, что опоздал на 2 года.

person Adam Houldsworth    schedule 23.08.2012