Потомок 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{}

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 года позже.

Другие вопросы по тегам