2012-02-13 27 views
8

Rozpocząłem pracę w nowym projekcie z dużą ilością złożeń w jednym rozwiązaniu. Nie jestem jeszcze zaznajomiony z zależnościami złożenia i mając trudności z ustaleniem, który zespół zależy od innego.Narzędzie do wyświetlania zależności złożeniowych

Czy znasz jakieś narzędzia, które są w stanie wyświetlić listę zależności lub lepszy wizualny wykres tego?

Każda pomoc doceniona!

Odpowiedz

4

NDepend jest królem, jeśli chodzi o analizę wykresu zależności. Narzędzie proponuje:

Zobacz wszystkie szczegóły w tym Stackoverflow answer dotyczące pokrewnego pytania.

+1

Dzięki za wszystkie sugestie. Już używamy NDepend w użyciu do sprawdzania jakości kodu Code Metrix/code, ale do tej pory nie zdałem sobie sprawy, że może on również utworzyć wykres zależności od kodu. Testowałem to i działa jak urok. To dokładnie to, czego potrzebowałem !!! – SvenG

12

Oto szybki kod, aby pokazać przypadku Cecil Library, aby to zrobić:

 

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("}"); 
} 

Generuje dot graph file. Bieganie to na dość prostych rezultatów projektu w:

enter image description here

uruchomiony go na nieco mniej prosty projekt wrócił to:

enter image description here

To może być wskazane, aby odfiltrować pewne zespoły (.StartsWith("System.") ?) i/lub ograniczyć głębokość wyszukiwania itp.

+0

niesamowite! (Powinieneś zaktualizować kod do Cecil .9, aby zapisać wszystkie Cast <>()). –

+0

+1 dla obrazu po "Uruchomienie go w nieco mniej prostym projekcie zwróciło to". – Steven

+0

@JbEvain: Jestem opóźniony przy aktualizacjach. Cecil służy mi wiele razy, ale nie mam wystarczająco dużo czasu, aby napisać moje narzędzia. Dzięki za miłe słowa (@others: JbE jest autorką Cecila, niesamowita biblioteka sprawiająca, że ​​jest to powiew) – sehe

Powiązane problemy