Mono Cecilをご覧ください。
このライブラリには、実際のアセンブリイメージに「反映する」機能があり、解析することができます。これは、Mono.Cecilを使用して依存関係分析を実行するために、「大きな」アセンブリにコンパイルする意思があることを前提としています。
編集実際には、あなたは単にそれの一部を除外しながら、「大きな」アセンブリをコピーするためにセシルを使用する場合があります。そうすれば、別々のアセンブリをコンパイルするのはあまり複雑ではありません。 Cecilの往復(read - > manipulate - > save)アセンブリの例については、CecilRoundtrip sampleを参照してください。
私は以前に(本質的には、静的コールツリーサーチ) '高度な' 検索用モノラルセシルを使用する方法のかなり大規模な例を公開しています
あなたに最も有用な最小絶対最小値は、おそらく次のようになります:
var types = assemblies
.SelectMany(assembly => assembly.MainModule.Types.Cast<TypeDefinition>());
var dependencies = types.ToDictionary(
key => key,
typedef => new HashSet<string>(typedef.Methods.Cast<MethodDefinition>()
.Where(method => null != method.Body) // ignore abstracts and generics
.SelectMany(method => method.Body.Instructions.Cast<Instruction>())
.Select(instr => instr.Operand)
.OfType<TypeReference>().Distinct()
// .Where(type => !type.Namespace.StartsWith("System"))
.Select(type => type.Name)));
foreach (var entry in dependencies)
{
Console.WriteLine("{0}\t{1}", entry.Key.Name, string.Join(", ", entry.Value.ToArray()));
}
注コメント行は、必要に応じてフレームワーク(System.String
、System.Char
等)からのものを除外します。
これは、宣言された型ごとに必要な型をリストします。使用されるタイプの一覧を表示するには、単にアセンブリ名への参照上のタグ:
SegmentSoortKenmerk SegmentSoortKenmerk
OperatorValue
Koppelpad Koppelpad, CodeLeidendVolgend
RedenWaarschuwing
RelExceptions
GecontroleerdDocument GecontroleerdDocument, GecontroleerdDocument[]
OwiExtraKenmerk OwiExtraKenmerk, Gegeven, BackofficeRelatie
Entiteit Entiteit, SleutelSysteemObject[], EniteitType
同様のクエリをが、アセンブリ名のルックアップを使用して:第一種の
.Select(type => type.Module.Assembly.Name.Name)));
サンプル出力(タイプが必要)
SegmentSoortKenmerk Lspo.Business
OperatorValue
Koppelpad Lspo.Business
RedenWaarschuwing
RelExceptions
GecontroleerdDocument Lspo.Business
OwiExtraKenmerk Lspo.Business
Entiteit Lspo.Business
例を挙げて質問を明確にしてください。現在、WindowsでMono Unit Testsをコンパイルするかどうかは不明です。あなたは 'それぞれの依存関係のDLLを生成する'(?依存関係は通常DLLです)... – sehe
あなたはこのシナリオを理解することが非常に難しいです。私はすでに個々のクラスファイルを作成したいと書いています。つまり、NUnitテストプロジェクト全体に対して1つのDLLを必要としませんが、NUnitテストプロジェクトの各テストクラスファイルに対して1つのDLLが必要です。感謝 –
正直言って、私はそれが文句だけだと思う。どちらにせよ、私は自分の答えを投稿しました – sehe