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:
uruchomiony go na nieco mniej prosty projekt wrócił to:
To może być wskazane, aby odfiltrować pewne zespoły (.StartsWith("System.")
?) i/lub ograniczyć głębokość wyszukiwania itp.
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