Como analisar uma montagem C# e extrair todos os métodos
-
25-09-2019 - |
Pergunta
Para o meu aplicativo, gostaria de analisar através de uma montagem e extrair todos os métodos e armazenar o nome do método e o código -fonte em um dos meus objetos (defini no meu código).
Onde devo começar a implementar isso?
EDIT: A partir das respostas e comentários, vi que não é tão fácil obter o código -fonte dos assemblies. Então, por onde devo começar se quiser obter o código -fonte dos arquivos de código -fonte que não estão na minha solução atual (Visual Studio)?
Solução
A montagem não contém o código -fonte. Você pode extrair o IL, mas sem ferramentas como refletor ou ildasm, isso não é especialmente útil.
Para obter o nomes de métodos, apenas algo como:
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();
Outras dicas
Para recuperar essas informações de depuração, use o Infraestrutura comum do compilador: API de metadados projeto.
Isso permite que você leia o .pdb
Arquivos (os arquivos que contêm as informações de depuração, como arquivo de origem e número da linha).
Não tenho certeza de como obter o código -fonte, mas se você estiver tentando obter informações sobre os métodos, use a reflexão.
MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
BindingFlags.Static);