列出DLL中的所有类

时间:2012-12-30 18:16:20

标签: c#-4.0 reflection

我想列出DLL中的所有类,而不必加载依赖项。我不想执行任何功能,我只想找出(有问题的)给定DLL中的类。那可能吗?我已经尝试使用assembly.GetTypes()调用,但由于执行DLL的依赖性而失败。是否还有其他方法可以列出所有公共类?

3 个答案:

答案 0 :(得分:1)

我建议你使用mono 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);
}

这不会加载所有依赖项。

答案 1 :(得分:0)

您可以使用Assembly.ReflectionOnlyLoad方法加载程序集而不执行它。

How to: Load Assemblies into the Reflection-Only Context

此外,您需要附加AppDomain.ReflectionOnlyAssemblyResolve,因为在仅反射上下文中,依赖关系不会自动解析。

答案 2 :(得分:0)

好的,我找到了。这种组合可以获得所有类的列表,而无需处理依赖项:

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