2012-02-13 40 views
8

मैंने एक नए प्रोजेक्ट में एक ही समाधान में कई असेंबली के साथ काम शुरू किया। मैं असेंबली निर्भरताओं के साथ अभी तक परिचित नहीं हूं और यह समझने में कठिनाई हो रही है कि कौन सी असेंबली दूसरे पर निर्भर करती है।असेंबली निर्भरताओं को दिखाने के लिए टूल

क्या आप किसी भी उपकरण को जानते हैं जो निर्भरता सूची दिखाने में सक्षम है या इसके दृश्य ग्राफ को बेहतर बनाता है?

किसी भी मदद की सराहना की!

उत्तर

4

NDepend राजा निर्भरता ग्राफ विश्लेषण की बात आती है। उपकरण का प्रस्ताव:

  • एक dependency graph
  • एक dependency matrix,
  • और भी कुछ C# LINQ queries संपादित किया जा सकता है (या उत्पन्न) ब्राउज़ करने के लिए निर्भरता।

संबंधित प्रश्न से संबंधित इस Stackoverflow answer में सभी विवरण देखें।

 

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 graph file उत्पन्न करता है:

+1

सभी सुझावों के लिए धन्यवाद। कोड मेट्रिक्स/कोड गुणवत्ता जांच के लिए हमारे पास पहले से ही एनडीपेन्स है, लेकिन अब तक मुझे एहसास नहीं हुआ है कि यह कोड निर्भरता ग्राफ भी बना सकता है। ने इसका परीक्षण किया है और एक आकर्षण की तरह काम करता है। यह वही है जो मुझे चाहिए !!! – SvenG

12

यहाँ मामला दिखाने के लिए Cecil Library यह करने के लिए कुछ त्वरित कोड है। में एक काफ़ी आसान परियोजना परिणामों पर यह चल रहा है:

enter image description here

एक थोड़ा कम सरल परियोजना पर यह चल रहा है इस लौटे:

enter image description here

यह निश्चित विधानसभाओं को फिल्टर करने की सलाह दी जाती हो सकता है (.StartsWith("System.") ?) और/या खोज गहराई आदि को सीमित करें

+0

कमाल! (आपको सभी कास्ट <>()) को सहेजने के लिए कोड को सेसिल 9 पर अपडेट करना चाहिए। आपकी छवि के लिए –

+0

+1 "इसे थोड़ा कम सरल परियोजना पर चलाने के बाद इसे वापस कर दिया"। – Steven

+0

@ जेबीईवेन: मैं अपडेट पर पीछे हूं। सेसिल मुझे कई बार सेवा देता है लेकिन मुझे अपने टूल्स लिखने के लिए लगभग पर्याप्त समय नहीं मिलता है। दयालु शब्दों के लिए धन्यवाद (@others: जेबीई सेसिल के लेखक हैं, भयानक लाइब्रेरी यह हवा बना रही है) – sehe