Как разобрать сборку C # и извлечь каждый метод - PullRequest
5 голосов
/ 17 ноября 2010

Для моего приложения я хотел бы проанализировать сборку и извлечь каждый метод и сохранить имя метода и исходный код в одном из моих объектов (я определил в своем коде).я должен начать реализовывать это?

РЕДАКТИРОВАТЬ: Из ответов и комментариев я увидел, что не так просто получить исходный код из сборок.Тогда с чего мне начать, если я хочу получить исходный код из файлов с исходным кодом, которых нет в моем текущем решении (visual studio)?

Ответы [ 4 ]

20 голосов
/ 17 ноября 2010

Сборка не содержит исходного кода.Вы можете извлечь IL, но без таких инструментов, как рефлектор или ildasm, которые не особенно полезны.

Чтобы получить имена методов , просто что-то вроде:

    var assembly = Assembly.GetExecutingAssembly();
    var names = (from type in assembly.GetTypes()
                 from method in type.GetMethods(
                   BindingFlags.Public | BindingFlags.NonPublic |
                   BindingFlags.Instance | BindingFlags.Static)
                 select type.FullName + ":" + method.Name).Distinct().ToList();
3 голосов
/ 17 ноября 2010

Чтобы получить эту информацию отладки, используйте Общая инфраструктура компилятора: Metadata API * проект 1003 *.

Это позволяет читать файлы .pdb (файлысодержит отладочную информацию, такую ​​как исходный файл и номер строки).

2 голосов
/ 17 ноября 2010

Сначала вам нужно найти все типы.

См. здесь , чтобы сделать это.

Тогда вам может понадобиться найти все методы для каждого типа.

См. здесь , чтобы сделать это.

Если вам нужен пример, чтобы собрать все вместе, дайте мне знать.

0 голосов
/ 17 ноября 2010

Я не уверен, как получить исходный код, но если вы пытаетесь получить информацию о методах, вы должны использовать отражение.

MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
                                                  BindingFlags.Static);
...