2010-12-17 9 views
17

Me gusta el atributo DebuggerDisplay. Me gusta tanto, que quiero usarlo en tipos para los que no tengo el código fuente.¿Se puede aplicar el atributo DebuggerDisplay a los tipos que no son de su propiedad?

¿Esto es posible?

+0

Algunos Espero que funcione DebuggerTypeProxy en el nivel de ensamblaje. No fue así. –

+0

@ Hans Passant - No lo he probado yo mismo, pero este artículo http://blog.jalil.org/2008/02/18/how-to-determine-event-subscribers/ muestra un ejemplo del uso de DebuggerTypeProxy dirigido a un montaje en el extranjero –

Respuesta

19

Ejemplo de ajuste DebuggerDisplay para un tipo exterior (System.Collections.Generic.KeyValuePair < TKey, TValue>) añada lo siguiente a AssemblyInfo.cs:

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

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

(Probado de VS2015)

1

Los atributos son una forma de decorar algo (tipos, métodos, campos, etc.) en tiempo de compilación y se almacenan en la representación binaria de un montaje. Una forma de agregar un nuevo atributo es recompilar el código con el nuevo atributo. Si no tiene el código, en algunos casos, puede obtener el código descompilando el ensamblado.

Otra forma que se me ocurre, podría ser la de utilizar la reflexión para cargar y procesar todos los tipos en un ensamblaje y luego generar (a través de la reflexión) otro montaje con DebuggerDisplay añadido a los tipos que quiera (aquí está an example)

21

Sí. De hecho, Microsoft fue tan amable de hacer de esto una opción incorporada en Visual Studio.

Busque "Mis documentos \ Visual Studio 20XX \ autoexp.cs" para ver ejemplos de cómo aplica el atributo DebuggerDisplay a tipos que son ajenos a su ensamblado. A continuación, agregue algunos de los suyos, vuelva a compilarlo y reemplace el autoexp.dll y reinicie Visual Studio. Debería funcionar.

Como referencia, ver el párrafo amarilla "Nota" en this MSDN article


alternativa: Soy el creador de un purchasable extension to Visual Studio que permite hacer esto con mucho menos ruido, incluso sin necesidad de tener para detener la sesión de depuración.

+0

Buena respuesta - Intenté la solución autoexp - el código de terceros que deseo cambiar la visualización del depurador está dentro del marco de la entidad. la compilación de autoexp falló porque no la incluí. ¿Tiene alguna sugerencia si puedo/debo incluir otras bibliotecas de terceros en la compilación? – user3141326

+0

Encontré que puedes ver las instrucciones completas aquí: http://www.tech-archive.net/Archive/VisualStudio/microsoft.public.vsnet.debugging/2006-08/msg00038.html funciona sin problemas. No hay necesidad de reiniciar Visual Studio. Solo basta con presionar F5 después de compilar autoexp.dll. Gracias por la gran respuesta. En – user3141326

+0

VS2015 todavía posible pero autoexp.cs no está presente, véase: https://stackoverflow.com/questions/33394892/modifying-external-debuggerdisplay-with-autoexp-cs-in-visual-studio-2015 – IvanH

Cuestiones relacionadas