Вот несколько быстрых кодов, чтобы показать регистр Сесил Библиотека , чтобы сделать это:
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("}");
}
Генерирует dot
файл графика . Выполнение этого в довольно простом проекте приводит к:
![enter image description here](https://i.stack.imgur.com/PySZA.png)
Запуск его в чуть менее простом проекте вернул это:
![enter image description here](https://i.stack.imgur.com/9OQF3.jpg)
Может быть целесообразно отфильтровать определенные сборки (.StartsWith("System.")
?) И / или ограничить глубину поиска и т. Д.