2012-02-13 13 views
8

Comencé a trabajar en un nuevo proyecto con muchos ensamblajes en una sola solución. Todavía no estoy familiarizado con las dependencias del ensamblado y me cuesta trabajo averiguar qué ensamblaje depende de otro.Herramienta para mostrar las dependencias de ensamblaje

¿Conoces alguna herramienta capaz de mostrar una lista de dependencias o una gráfica visual de la misma?

Cualquier ayuda apreciada!

Respuesta

4

NDepend es el rey cuando se trata de análisis gráfico de dependencia. La herramienta propone:

Ver todos los detalles en este Stackoverflow answer con respecto a una pregunta relacionada.

+1

Gracias por todas las sugerencias. Ya tenemos NDepend en uso para Code Metrix/cheques de calidad de código, pero hasta ahora no me había dado cuenta de que también puede crear un gráfico de dependencia de código. Lo he probado y funciona como un encanto. ¡Es exactamente lo que necesitaba! – SvenG

12

Aquí hay un código rápido para mostrar el caso de la Cecil Library para hacer esto:

 

public static void PoC(IEnumerable<AssemblyDefinition> assemblies, TextWriter writer) 
{ 
    Console.WriteLine("digraph Dependencies {"); 
    var loaded = assemblies 
     .SelectMany(a => a.Modules.Cast<ModuleDefinition>()) 
     .SelectMany(m => m.AssemblyReferences.Cast<AssemblyNameReference>().Select(a => a.Name + ".dll")) 
     .Distinct() 
     .Select(dllname => { 
       try { return AssemblyFactory.GetAssembly(dllname); } 
       catch { return null; } }) 
     .Where(assembly => assembly != null) 
     .ToList(); 

    loaded.ForEach(a => a.MainModule.FullLoad()); 

    loaded.ForEach(a => 
     { 
      foreach (var r in a.MainModule.AssemblyReferences.Cast<AssemblyNameReference>()) 
       Console.WriteLine(@"""{0}"" -> ""{1}"";", r.Name, a.Name.Name); 
     }); 

    Console.WriteLine("}"); 
} 

genera un dot graph file. La ejecución de este en un bastante simples resultados del proyecto en:

enter image description here

corriendo en un proyecto un poco menos sencilla regresaron esto:

enter image description here

Puede ser recomendable para filtrar ciertos montajes (.StartsWith("System.") ?) y/o limitar la profundidad de búsqueda, etc.

+0

¡increíble! (Debe actualizar el código a Cecil .9 para guardarle todos los Cast <>()). –

+0

+1 para su imagen después de "Ejecutarlo en un proyecto un poco menos simple devolvió esto". – Steven

+0

@JbEvain: estoy atrasado en las actualizaciones. Cecil me sirve muchas veces pero no tengo suficiente tiempo para escribir mis herramientas. Gracias por las amables palabras (@others: JbE es el autor de Cecil, la asombrosa biblioteca que hace que esto sea pan comido) – sehe

Cuestiones relacionadas