我有* .dll用C#编写,我需要获取该* .dll中包含的所有公共方法或类的列表。有没有办法用C#编程?
答案 0 :(得分:13)
是使用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);
}
}
答案 1 :(得分:4)
var assembly = // grab assembly
var types = assembly.GetExportedTypes();
foreach (var type in types) {
var methods = type.GetMethods(BindingFlags.Public);
}
GetExportedTypes将返回程序集中的所有公共类型。您也没有指定是否只需要实例方法,静态方法或两者。
答案 2 :(得分:2)
使用System.Net.Reflection。反射类允许您在运行时查询DLL类型的元数据。
像this.GetType().Assembly.GetTypes();
答案 3 :(得分: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);
}
}