net - c# summary




Ottieni il contenuto di un metodo da un file cs (4)

Non so se è utile per te, ma i componenti aggiuntivi di Visual Studio includono un oggetto EnvDTE, che ti dà pieno accesso ai parser di linguaggio VB e C #. Vedi Discovering Code con il codice Modello

L'ho toccato tangenzialmente anni fa, non so quanto sia difficile da usare, o quanto sia efficace, ma sembra che ti darà ciò di cui hai bisogno.

Il modello di codice consente ai client di automazione di evitare l'implementazione di un parser per i linguaggi di Visual Studio al fine di scoprire le definizioni di alto livello in un progetto, quali classi, interfacce, strutture, metodi, proprietà e così via.

Se leggi l'articolo per intero, ti dice come estrarre il testo completo da un file per una funzione

Spero che questo ti aiuti :)

Ho il requisito di ottenere il contenuto di ogni metodo in un file CS in una stringa. Quello che sto cercando è quando hai un input di un file cs, un dizionario viene restituito con il nome del metodo come chiave e il corpo del metodo come valore.

Ho provato Regex e la riflessione senza successo, qualcuno può aiutare?

Grazie


In generale il problema che stai cercando di risolvere è analizzare il codice C # nello stesso modo in cui lo fa il compilatore, e quindi salvare il contenuto delle funzioni piuttosto che generare codice. Quindi, come sfondo per la tua soluzione dovresti guardare le grammatiche c # e come analizzarle.

Come per StingyJack, un metodo semplice per farlo sarebbe quello di creare un'espressione regolare che identifica solo le definizioni di funzione. Quindi puoi assumere che tutto ciò che c'è in mezzo è un corpo di una funzione. Tuttavia, questa supposizione non gestirà cose come più classi in un solo file o anche in coda alla fine di una classe. Per gestire cose del genere dovrai progettare il compilatore di # ac, poiché l'elaborazione della grammatica c # completa è l'unica cosa che identificherà correttamente ciò che c # pensa sia una funzione.


Un parser personalizzato sarà l'opzione migliore. Come Blair ha dichiarato nel commento a StingyJack, è MOLTO difficile analizzare il codice con espressioni regolari. L'ho provato una volta e, sebbene sia possibile abbinare le parentesi graffe con NET, i commenti di escape e le stringhe sono molto più complicati.

Un parser dovrebbe rendere le cose molto più semplici. Vedi antlr per un buon generatore.

Per quanto riguarda la riflessione, credo che si possa tentare di compilare il codice (purché si disponga di tutte le dipendenze necessarie) e quindi accedervi contenuto come Reflector. Ma andrei con il parser.


dopo aver trovato le intestazioni delle funzioni, contare il numero di parentesi graffe fino a trovare la fine della funzione.





methods