DebuggerDisplay属性可以应用于一个不拥有的类型吗?

时间:2010-12-17 09:07:27

标签: .net visual-studio debugging

我喜欢DebuggerDisplay属性。我非常喜欢它,我想在我没有源代码的类型上使用它。

这可能吗?

3 个答案:

答案 0 :(得分:29)

为外来类型设置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中测试)

答案 1 :(得分:21)

是。事实上,微软非常擅长将其作为Visual Studio中的内置选项。

查看“My Documents \ Visual Studio 20XX \ autoexp.cs”以获取有关如何将DebuggerDisplay属性应用于程序集外来类型的一些示例。然后,添加一些自己的,重新编译它并替换autoexp.dll,然后重新启动Visual Studio。它应该工作。

供参考,请参阅this MSDN article

中的黄色“注释”段落

另外:我是purchasable extension to Visual Studio的创建者,可以更轻松地执行此操作,甚至无需停止调试会话。

答案 2 :(得分:1)

属性是一种在编译时装饰某些东西(类型,方法,字段等)的方法,它们存储在程序集的二进制表示中。在其中添加新属性的一种方法是使用new属性重新编译代码。如果您没有代码,在某些情况下,您可能会通过反编译程序集来获取代码。

我能想到的另一种方法,可能是使用Reflection来加载和处理程序集中的所有类型,然后生成(通过反射)另一个程序集,并将DebuggerDisplay添加到您想要的类型(这里是an example