Как получить все открытые методы из * .dll - PullRequest
10 голосов
/ 17 сентября 2011

У меня * .dll написан на C #, и мне нужно получить список всех открытых методов или классов, содержащихся в этом * .dll. Есть ли какой-нибудь способ сделать это программно с C #?

Ответы [ 3 ]

13 голосов
/ 17 сентября 2011

Да, используйте 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);
    }
}
4 голосов
/ 17 сентября 2011
var assembly = // grab assembly
var types = assembly.GetExportedTypes();

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

GetExportedTypes вернет все открытые типы в сборке. Вы также не указали, хотите ли вы только методы экземпляра, статические методы или оба.

2 голосов
/ 17 сентября 2011

Использовать System.Net.Reflection. Классы отражения позволяют запрашивать метаданные типов DLL во время выполнения.

Что-то вроде this.GetType().Assembly.GetTypes();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...