Можно ли применить атрибут DebuggerDisplay к типам, которые не принадлежат? - PullRequest
27 голосов
/ 17 декабря 2010

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

Возможно ли это?

Ответы [ 3 ]

32 голосов
/ 09 января 2016

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

using System.Collections.Generic;
using System.Diagnostics;

[assembly: DebuggerDisplay("[Key={Key}, Value={Value}]", Target = typeof(KeyValuePair<,>))]

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

21 голосов
/ 18 декабря 2010

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

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

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


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

1 голос
/ 17 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...