lunes, 10 de abril de 2017

Visual Studio Collection Visualizers





Hace tiempo, varios años atrás, estuve desarrollando un programa en .NET, la cual contenía una gran cantidad de comparaciones entre secuencias. El tamaño de estas colecciones eran bastante grandes y el debugeo y la comprobación de los resultados se convertía en un infierno el navegar entre los treeviews de resultados.

Decidí construir una dll que me permitiera poder visualizar las secuencias y los filtrados y las comparaciones entre ellos. Un tiempo después lo actualicé a un visualizer, simplificaba bastante el trabajo. Ya que el resultado fue bastante satisfactorio, hoy lo comparto con todos vosotros.






Instalación

La instalación MLCollectionVisualizers es muy simple, aunque tendremos que distinguir entre Visual Studio 2015 and Visual Studio 2017.



VISUAL STUDIO 2015:

Debemos copiar el ensamblado MLCollectionVisualizer2015.dll en esta ruta: 

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\






























VISUAL STUDIO 2017:

Debemos copiar el ensamblado MLCollectionVisualizer2017.dll en esta ruta: 

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Packages\Debugger\Visualizers\

























Una vez el ensamblado ha sido copiado en la ruta de visualizer de la versión de Visual Studio correspondiente, reiniciaremos Visual Studio y ya estará instalado.



MLCollectionVisualizers

MLCollectionVisualizers es muy simple de usar. Será necesario marcar la clase como SERIALIZABLE. Si alguien no se siente conforme con esto, podemos utilizar directivas de preprocesador como vemos en este ejemplo:

#if DEBUG
[Serializable] 
#endif
public class Album
{
    public int      ID             { get; set; }
    public string   Artist         { get; set; }
    public string   AlbumName      { get; set; }
    public int      Released       { get; set; }
    public string   Genre          { get; set; }
    public decimal  NumberOfCopies { get; set; }
    public int      ClaimedSales   { get; set; }


}


Emplearlo es muy fácil. Pondremos un breakpoint en una variable que guarda datos de una colección, y haremos click en la lupa.





















































































Como se puede apreciar podemos ordenar los datos pinchando en la cabecera del grid.



Filtrado

MLCollectionVisualizer  proporciona filtrado de datos, este filtrado está restringido a técnica de filtrado de la propiedad DataColumn.Expression , muy similar a SQL.

Dos desplazaremos hasta la segunda pestaña ‘Filters’:






























Etiqueta de Link ‘Filter Info’.- Contiene un link a la página de Microsoft con información sobre la forma de filtrado.
Botón ‘Apply Filter’.- Ejecuta el filtrado.

Ejemplo:























































En movimiento:






































Si escribimos un filtro con la sintaxis incorrecta aparecerá este mensaje de error:

























En este ejemplo sobraría el símbolo ‘=’.




Colecciones Soportadas

MLCollectionsVisualizers soporta los siguientes tipos de colecciones:
  • IEnumerable<T>
  • ICollection<T>
  • IList<T>
  • HashSet<T>
  • ObservableCollection<T>
  • Queue<T>
  • Stack<T>
  • LinkedList<T>
  • IReadOnlyCollection<T>
  • ConcurrentBag<T>
  • ConcurrentQueue<T>
  • ConcurrentStack<T>
  • Array ( T[] )
  • IEnumerable
  • ArrayList
  • HashSet
  • Queue
  • Stack




Limitaciones


No soporta procesos x64.

No soporta System.Data.Entities.DynamicProxies de Entity Framework. Cuando consultamos datos de un contexto de Entity Framework, este genera por defecto este tipo de proxies dinámicos a partir del tipo de la entidad:




















Podemos arreglar esta carencia, configurando la propiedad ProxyCreationEnabled de nuestro DbContext a false:


context.Configuration.ProxyCreationEnabled = false;


























Proyecto de Tests

He añadido un proyecto de tests, para poder ver el visualizer en acción. También he añadido para descargar las librerías necesarias según la versión de Visual Studio. Estas librerías tendrás que estar instaladas antes de ejecutar el proyecto.


Dlls
https://drive.google.com/open?id=0B2hueHRCv0E7bmM4ZWJPVnhaOFU

Projecto de Tests
https://drive.google.com/open?id=0B2hueHRCv0E7V1pRWFZPWm1fSFE