Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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


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

Ответ 3

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

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