Может ли атрибут DebuggerDisplay применяться к типам, которые не принадлежат?

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

Это возможно?

Пример настройки DebuggerDisplay для иностранного типа (System.Collections.Generic.KeyValuePair ) добавить в AssemblyInfo.cs следующее:

 using System.Collections.Generic; using System.Diagnostics; [assembly: DebuggerDisplay("[Key={Key}, Value={Value}]", Target = typeof(KeyValuePair<,>))] 

(Протестировано в VS2015)

Да. На самом деле, Microsoft была настолько хороша, что сделала это встроенной опцией в Visual Studio.

Посмотрите на «Мои документы \ Visual Studio 20XX \ autoexp.cs» для некоторых примеров применения атрибута DebuggerDisplay к типам, которые являются чужими для вашей сборки. Затем добавьте часть своей, перекомпилируйте ее и замените autoexp.dll и перезапустите Visual Studio. Это должно просто работать.

Для справки см. Желтый абзац «Примечание» в этой статье MSDN


В качестве альтернативы: я являюсь создателем приобретаемого расширения для Visual Studio, что позволяет делать это с гораздо меньшей проблемой, даже не нужно останавливать сеанс отладки.

Атрибуты – это способ украсить что-то (типы, методы, поля и т. Д.) Во время компиляции, и они хранятся в двоичном представлении сборки. Один из способов добавить в него новый атрибут – перекомпилировать код с новым атрибутом. Если у вас нет кода, в некоторых случаях вы можете получить код, декомпилировав сборку.

Другой способ, которым я могу думать, может состоять в том, чтобы использовать Reflection для загрузки и обработки всех типов в сборке, а затем сгенерировать (через reflection) еще одну сборку с добавлением DebuggerDisplay к типам, которые вы хотите (вот пример )

  • В Visual Studio C ++, каковы представления распределения памяти?
  • Отладка JBoss в Eclipse
  • Где читать консольные сообщения из background.js в расширении Chrome?
  • Сравнить скомпилированные сборки .NET?
  • Можно ли «прыгать» / «пропустить» в отладчике GDB?
  • Как программа C может выдать основной дамп без остановки?
  • Как фильтровать стек вызовов в представлении отладки Eclipse для Java
  • Жасмин: обратный вызов Async не вызывался в течение таймаута, указанного jasmine.DEFAULT_TIMEOUT_INTERVAL
  • Отладка службы Windows
  • iphone - NSTimers в фоновом режиме
  • Прикрепить отладчик в C # к другому процессу
  • Interesting Posts

    Ограниченная по размеру очередь, содержащая последние N элементов в Java

    Переход на последнюю вкладку в Firefox

    X на одном мониторе, голый терминал tty на другом? (Linux)

    Как я могу «открыть» файл из WSL с помощью приложения по умолчанию?

    У меня есть LOTS TAP-Win32-адаптера OAS и TAP-Windows Adapter V9

    получить удобочитаемый АСТ от кода c ++

    Android: Создайте spinner программно из массива

    Как найти наименьшую подстроку, которая содержит все символы из данной строки?

    Разрешения для папки IIS7 для веб-приложения

    Не удается создать обработчик внутри streamа, который не вызвал Looper.prepare ()

    Как подключить pyodbc к файлу базы данных Access (.mdb)

    Инициализатор константного выражения для статического члена classа типа double

    Как сериализовать словарь как часть его родительского объекта с помощью Json.Net

    Способы устранения коммутатора в коде

    Как сохранить настройки шрифта в Notepad ++

    Давайте будем гением компьютера.