2012-02-13 32 views
8

多くのアセンブリを含む新しいプロジェクトを単一のソリューションで開始しました。 まだアセンブリの依存関係に精通しておらず、どのアセンブリが別のアセンブリに依存しているかを把握するのに苦労しています。アセンブリの依存関係を示すツール

依存関係リストを表示する機能があるか、それともビジュアルグラフが優れているツールがありますか?

答えて

4

NDependは、依存グラフ分析になると王様です。ツールは、提案されている:

この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

ありがとうございます。私たちはすでにCode Metrix /コードの品質チェックにNDependを使用していますが、これまでコード依存グラフを作成することはできませんでした。 それをテストし、魅力的に働きました。その正確に私が必要なもの! – SvenG

12

は、これを行う場合Cecil Libraryを示すためにいくつかの簡単なコードです。 .StartsWith("System.")

enter image description here

特定のアセンブリをフィルタリングすることが推奨される:わずかに少ない単純なプロジェクトがこれを返された上でそれを実行している

enter image description here

:かなり単純なプロジェクトの結果でこれを実行するには?)および/または検索深度を制限する。

+0

素晴らしい! (すべてのCast <>()を保存するには、コードをCecil .9に更新する必要があります)。 –

+0

+1画像を「少し単純でないプロジェクトで実行した後」に+1しました。 – Steven

+0

@JbEvain:私は更新が遅れています。セシルは私を何度も務めていますが、私は自分のツールを書くのに十分な時間がありません。おいしい言葉をありがとう(他人:JbEはCecilの作者であり、これはすばらしい図書館です) – sehe

関連する問題