Может ли атрибут 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 к типам, которые вы хотите (вот пример )

  • Как добавить точку останова в objc_exception_throw?
  • Удаленная отладка приложения Java
  • Как установить контрольную точку JavaScript из кода в Chrome?
  • Как найти, где исключение было выбрано на C ++?
  • Перерыв при изменении значения с помощью отладчика Visual Studio
  • Как я могу увидеть исходный файл C / C ++ после предварительной обработки в Visual Studio?
  • Использование трассировки и dbg в Erlang
  • Использование Chrome, как найти, какие события связаны с элементом
  • Не удается войти в исходный код платформы .NET
  • Как отлаживать скрипт перезаписи htaccess
  • Можно ли «прыгать» / «пропустить» в отладчике GDB?
  • Interesting Posts

    Удобный способ анализа входящих параметров multipart / form-data в Servlet

    SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ef3, не удалось завершить операцию из-за ошибки 00002ef3

    Как интерпретировать параметры в DIMM Datasheet?

    Расширение формулы ячейки, разрешающей все ее ссылки (прецеденты)

    Как удержать жесткий диск от сна?

    Как читать трассировки стека объектов-c

    Windows 7 – Прочность беспроводного сигнала – Сеть часто говорит о ограниченной активности или отсутствии активности

    Реалистичное использование ключевого слова «ограничивать» C99?

    Каковы варианты прекращения изменчивого заимствования в Rust?

    Почему он неодобрительно использует пустой макет в Swing?

    Экран загрузки предварительной загрузки для Angular2

    Как установить GRUB изнутри Windows 7

    Сначала необходимо выпустить команду STARTTLS

    Как присоединиться к двум спискам в Java?

    Виртуальный ящик, подключающийся к другой сети на хосте и гостевой

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