【发布时间】:2011-11-19 06:36:32
【问题描述】:
我有使用 C# 编写的 *.dll,我需要获取该 *.dll 中包含的所有公共方法或类的列表。有没有办法用 C# 以编程方式做到这一点?
【问题讨论】:
标签: c# .net reflection public-method
我有使用 C# 编写的 *.dll,我需要获取该 *.dll 中包含的所有公共方法或类的列表。有没有办法用 C# 以编程方式做到这一点?
【问题讨论】:
标签: c# .net reflection public-method
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);
}
}
【讨论】:
var assembly = // grab assembly
var types = assembly.GetExportedTypes();
foreach (var type in types) {
var methods = type.GetMethods(BindingFlags.Public);
}
GetExportedTypes 将返回程序集中的所有公共类型。您也没有指定是否只需要实例方法、静态方法或两者兼而有之。
【讨论】:
是的,使用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);
}
}
【讨论】:
使用 System.Net.Reflection。反射类允许您在运行时查询 DLL 类型的元数据。
类似this.GetType().Assembly.GetTypes();
【讨论】: