Come fare il parsing di programmazione e modificare il codice C #
Domanda
Quello che voglio fare è leggere il codice C #, analizzarlo, inserire alcune chiamate di metodo e compilarlo alla fine.
E 'possibile convertire il codice sorgente C # (una lista di stringhe) per gli oggetti CodeDOM?
Soluzione
Non è direttamente possibile farlo con il nucleo NET Framework. È necessario utilizzare terzi o add-on strumenti, ad esempio:
- Open source C # Parser: http://www.codeplex.com/csparser
- GPLEX accoppiato con un C # grammatica : http://plas.fit.qut.edu.au/gplex/
Altri suggerimenti
Questa è una domanda molto vecchio, ma vale la pena notare che la risposta accettata non è più applicabile. recente href="https://github.com/dotnet/roslyn" progetto Roslyn è esplicitamente rivolto a esporre tutte le conoscenze i guadagni del compilatore circa la vostra base di codice in fase di staticamente analizzarla, e di esporre tutte queste informazioni tramite le API gestite per voi da sfruttare. E 'disponibile sia per VB e C #.
Dal momento che si desidera consumare informazioni analisi statica, è necessario il Microsoft.CodeAnalysis
NuGet pacchetto (la roba che serve per C # è sotto il namespace Microsoft.CodeAnalysis.CSharp
) e un po 'di tempo al campioni e procedure dettagliate nella documentazione.
Linq su C # . E 'meraviglioso.
Se si desidera che la capacità di analizzare ed eseguire analisi arbitrarie e le trasformazioni in codice sorgente C # (o una varietà di altre lingue), controllare il nostro Il DMS Software Reengineering Toolkit.
DMS ha un C # front end completa, costruisce completi albero sintattico astratto per il codice analizzata (ma non una CodeDom), fornisce un'API procedurale completo per camminare / verifica / modifica delle AST. Dopo rivedere l'albero, DMS può rigenerare il codice sorgente corrispondente all'albero modificati, sia nella modalità fedeltà in cui viene mantenuta la spaziatura originale, o la modalità prettyprint quando esso applica una stile prettyprint che è possibile controllare completamente. I commenti sono mantenuti nella fonte rigenerata correttamente.
Inoltre, DMS fornisce modello a livello sorgente di corrispondenza e di trasformazione (ad esempio, si può scrivere "x = x + 1 ==> x ++" invece di codificare tutti i walk-around-tree-to-verifica, incidere l'albero per cambiare). Vedere interessante resoconto sulle trasformazioni del programma di capire che cosa il motivo per cui questo è un molto meno lavoro ..
Il CSharpCodeProvider potrebbe essere quello che' re cercando.