2012-02-13 47 views
8

Tôi bắt đầu làm việc trong một dự án mới với nhiều hội đồng trong một giải pháp duy nhất. Tôi không quen thuộc với các phụ thuộc lắp ráp và có một thời gian khó khăn để tìm ra lắp ráp phụ thuộc vào nhau.Công cụ để hiển thị phụ thuộc lắp ráp

Bạn có biết bất kỳ công cụ nào có khả năng hiển thị danh sách phụ thuộc hoặc biểu đồ trực quan tốt hơn không?

Bất kỳ trợ giúp nào được đánh giá cao!

Trả lời

4

NDepend là vị vua khi nói đến phân tích biểu đồ phụ thuộc. Công cụ này đề xuất:

Xem tất cả các chi tiết trong số Stackoverflow answer liên quan đến câu hỏi liên quan.

+1

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

12

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:

enter image description here

chạy nó trên một dự án hơi ít đơn giản trở lại này:

enter image description here

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.

+0

tuyệt vời! (Bạn nên cập nhật mã cho Cecil .9 để lưu tất cả Cast <>()). –

+0

+1 cho hình ảnh của bạn sau khi "Chạy nó trên một dự án đơn giản hơn một chút đã trả về điều này". – Steven

+0

@JbEvain: Tôi đang theo dõi các cập nhật. Cecil phục vụ tôi rất nhiều lần nhưng tôi không có đủ thời gian để viết các công cụ của tôi. Cảm ơn những lời tốt đẹp (@others: JbE là tác giả của Cecil, thư viện tuyệt vời làm cho việc này trở nên dễ dàng) – sehe

Các vấn đề liên quan