14

我有 *.dll 用 C# 编写,我需要获取该 *.dll 中包含的所有公共方法或类的列表。有没有办法用 C# 以编程方式完成它?

4

4 回答 4

16

是的,使用Assembly.GetTypes提取所有类型,然后对每种类型使用反射来迭代公共方法。

Assembly a = Assembly.LoadWithPartialName("...");
Type[] types = a.GetTypes();
foreach (Type type in types)
{
    if (!type.IsPublic)
    {
        continue;
    }

    MemberInfo[] members = type.GetMembers(BindingFlags.Public
                                          |BindingFlags.Instance
                                          |BindingFlags.InvokeMethod);
    foreach (MemberInfo member in members)
    {
        Console.WriteLine(type.Name+"."+member.Name);
    }
}
于 2011-09-17T13:05:25.640 回答
5
var assembly = // grab assembly
var types = assembly.GetExportedTypes();

foreach (var type in types) {
    var methods = type.GetMethods(BindingFlags.Public);
}

GetExportedTypes 将返回程序集中的所有公共类型。您也没有指定是否只需要实例方法、静态方法或两者兼而有之。

于 2011-09-17T13:35:50.747 回答
2

使用 System.Net.Reflection。反射类允许您在运行时查询 DLL 类型的元数据。

就像是this.GetType().Assembly.GetTypes();

于 2011-09-17T13:04:41.723 回答
1

Assembly.LoadWithPartialName("...") 方法现在已弃用,请改用 LoadFile() 方法。

Assembly a = Assembly.LoadFile("filename.dll");
        Type[] types = a.GetTypes();
        foreach (Type type in types)
        {
            if (!type.IsPublic)
            {
                continue;
            }

            MemberInfo[] members = type.GetMethods();
            foreach (MemberInfo member in members)
            {
                Console.WriteLine(type.Name + "." + member.Name);
            }
        }
于 2021-02-22T09:52:21.650 回答