Dưới đây là một số mã nhanh chóng để hiển thị trường hợp Cecil Library để làm điều này:
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("}");
}
Nó tạo ra một dot
graph file. Hoạt động này trên một kết quả dự án khá đơn giản trong:
chạy nó trên một dự án hơi ít đơn giản trở lại này:
Nó có thể được khuyến khích để lọc ra các hội nhất định (.StartsWith("System.")
?) và/hoặc giới hạn độ sâu tìm kiếm, v.v.
Cảm ơn mọi đề xuất. Chúng tôi đã có NDepend sử dụng để kiểm tra chất lượng mã Metrix/mã, nhưng tôi đã không nhận ra cho đến bây giờ rằng nó có thể tạo ra một biểu đồ phụ thuộc mã cũng có. Đã thử nghiệm và hoạt động như một sự quyến rũ. Chính xác những gì tôi cần !!! – SvenG