Потомок DataTable с атрибутом DebuggerDisplay теряет DebuggerVisualizer - PullRequest
2 голосов
/ 12 октября 2009

У меня есть потомок 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{}

1 Ответ

2 голосов
/ 23 августа 2012

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

Я пробовал что-то подобное, и ничто не мешает вам применить к типу DebuggerDisplay и DebuggerVisualizer. Изображение ниже показывает оба, левый кружок - визуализатор отладчика, правый кружок - дисплей отладчика:

Debugger Display and Visualizer both visible

Однако у вас могут возникнуть проблемы с попыткой использовать тип DataSetVisualizer в вашем классе. Потребовалось много jiggery-pokery, но я закончил со следующим определением для моего класса:

[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 \ Визуализаторы \

Вызывается:

Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll

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

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

...