2012-12-30 32 views
0

我想列出DLL中的所有類,而不必加載依賴關係。我不想執行任何功能,我只想找出(有問題)給定DLL中的哪些類。那可能嗎?我試過使用assembly.GetTypes()調用,但由於執行DLL的依賴關係而失敗。有沒有其他方式可以列出所有的公共課程?列出DLL中的所有類

回答

0

好的,我找到了。這個組合可以獲得所有類的列表,而不必處理相關性:

Assembly assembly = Assembly.LoadFrom(filename); Type [] types = assembly.GetTypes();

+0

事實上,這不應該工作... – gustavodidomenico

0

您可以使用Assembly.ReflectionOnlyLoad方法來加載程序集而不執行它。

How to: Load Assemblies into the Reflection-Only Context

你也需要附加AppDomain.ReflectionOnlyAssemblyResolve因爲在只反射上下文,它的依賴不會自動解決。

+0

好的,我找到了。該組合可以獲得所有類的列表,而不必處理相關性: Assembly assembly = Assembly.LoadFrom(filename); Type [] types = assembly.GetTypes(); – Dimondwoof

1

我建議你使用單聲道Cecil庫。這是基本示例:

//Creates an AssemblyDefinition from the "MyLibrary.dll" assembly 
AssemblyDefinition myLibrary = AssemblyFactory.GetAssembly ("MyLibrary.dll"); 

//Gets all types which are declared in the Main Module of "MyLibrary.dll" 
foreach (TypeDefinition type in myLibrary.MainModule.Types) { 
    //Writes the full name of a type 
    Console.WriteLine (type.FullName); 
} 

這不會加載所有依賴關係。