Come analizzare un C # di montaggio ed estrarre ogni metodo
-
25-09-2019 - |
Domanda
Per la mia domanda mi piacerebbe analizzare attraverso un assemblaggio ed estrarre ogni metodo e memorizzare il nome del metodo e il codice sorgente in uno dei miei oggetti (ho definito nel mio codice).
dove dovrei cominciare a implementare questo?
EDIT: Dalle risposte e commenti ho visto che non è così facile da ottenere il codice sorgente dalle assemblee. Poi dove dovrei cominciare se voglio ottenere il codice sorgente da file di codice sorgente che non sono nella mia soluzione corrente (Visual Studio)?
Soluzione
Il gruppo non contiene il codice sorgente. Potreste essere in grado di estrarre l'IL, ma senza strumenti come riflettore o ildasm che non è particolarmente utile.
Per ottenere il nomi dei metodi , solo qualcosa di simile:
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();
Altri suggerimenti
Per recuperare queste informazioni di debug, utilizzare il Comune Compiler Infrastructure:. Metadata API progetto
Questo consente di leggere i file .pdb
(i file contenenti le informazioni di debug come file di origine e il numero di riga).
Non sono sicuro di come ottenere il codice sorgente, ma se si sta cercando di ottenere informazioni sui metodi, si dovrebbe utilizzare la riflessione.
MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
BindingFlags.Static);