我想找到給定類型所依賴的所有類型,包括接口,抽象類,枚舉,結構等。我想加載一個程序集,並打印出一個列表中定義的所有類型,和他們的依賴。如何在任何基於CLR的語言程序集中查找給定類型的所有類型依賴關係?
到目前爲止,我已經能夠找到CLR程序集使用Mono.Cecil所依賴的所有外部類型,例如,
using System;
using Mono.Cecil;
using System.IO;
FileInfo f = new FileInfo("SomeAssembly.dll");
AssemblyDefinition assemDef = AssemblyFactory.GetAssembly (f.FullName);
List<TypeReference> trList = new List<TypeReference>();
foreach(TypeReference tr in assemblyDef.MainModule.TypeReferences){
trList.Add(tr.FullName);
}
也可以使用單disasembler,如「monodis SomeAssembly.dll --typeref」獲得的這份名單,但這個名單似乎不包括原語,如System.Void,System.Int32等
我需要分別對待每種類型,並獲取給定類型依賴的所有類型,即使類型是在同一個程序集中定義的。 有沒有辦法使用Mono.Cecil或任何其他項目來做到這一點?我知道它可以通過加載程序集,然後遍歷每個定義的類型,然後加載該類型的IL並掃描它的引用,但我相信有更好的方法可以完成。理想情況下,它也可以與匿名內部類一起工作。
如果在同一個組件中定義了多個模塊,它也應該可以工作。
謝謝[287]莪, 我知道NDepend的,這是一個偉大的產品。 我想生成一個依賴類型的列表,所以我可以將它餵給另一個工具。因此NDepend不是我需要的工具。 – 2010-01-17 20:44:27