Utiliser DebuggerDisplay sur des types externes

L'attribut DebuggerDisplay est très utile pour afficher une représentation textuelle explicite d'un type. C'est très utile surtout pour les collections. Pour vos propres types, il suffit d'ajouter l'attribut à votre déclaration de classe. Par exemple:

[DebuggerDisplay("{FirstName} {LastName}")]
public class Person {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

Mais comment procéder pour des types dont vous ne possédez pas le code source ? Et bien Microsoft a prévu ce cas de figure. Si vous allez dans C:\Users\<Votre nom d'utilisateur>\Documents\Visual Studio 2013\Visualizers\, il y a un fichier nommé autoexp.cs qui vous permet d'appliquer DebuggerDisplay à n'importe quelle classe.

Par exemple, quand je développe pour Autodesk Vault, j'utilise une bibliothèque Autodesk.Connectivity.WebServices dans lequel se trouve une classe File. Pour avoir lors du débogage des informations plus utile que le simple nom du type, il me suffit d'ajouter la ligne suivante au fichier autoexp.cs :

[assembly: DebuggerDisplay(@"\{Name = {Name}, Version = {VerNum}}", 
  Target = typeof(Autodesk.Connectivity.WebServices.File))]

Ensuite je recompile le fichier avec l'option /t:library pour créer une DLL :

"C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" /t:library 
  /r:"C:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\
  Autodesk.Connectivity.WebServices.dll" 
  autoexp.cs

Notez que j'utilise l'option /r pour inclure une référence à mon assemblage externe.

Je redémarre ensuite Visual Studio et j'ai alors un affichage nettement plus pratique :

Avec l'attribut DebuggerDisplay en place

C'est un peu compliqué mais ça marche. Si vous voulez quelque chose de plus simple, l'extension Visual Studio OzCode (payante) a une fonctionnalité Reveal qui fait sensiblement la même chose.

Add new comment