Domanda

Ho bisogno di analizzare una semplice istruzione (essenzialmente una catena di chiamate di funzione su qualche oggetto) rappresentato come variabile stringa in un oggetto CodeDom (probabilmente una sottoclasse di CodeStatement). Vorrei anche di fornire alcune importazioni di default di spazi dei nomi per essere in grado di utilizzare le dichiarazioni meno dettagliati.

Ho guardato in giro così e Internet per trovare alcuni suggerimenti, ma sono abbastanza confuso su ciò che è e non è possibile e ciò che è il modo più semplice per farlo. Per esempio questa domanda sembra essere quasi quello che voglio, purtroppo non riesco a utilizzare la soluzione come CodeSnippetStatement non sembra essere supportato dal motore di esecuzione che uso (WF governa motore).

Tutti i suggerimenti che mi potrebbero aiutare / punto me nella giusta direzione?

È stato utile?

Soluzione

Non c'è biblioteca o di una funzione per analizzare il codice C # in oggetti CodeDOM come parte delle librerie standard .NET. Le librerie CodeDOM sono alcuni metodi che sembrano essere progettati per questo, ma nessuno di loro sono effettivamente applicate. Per quanto ne so, v'è una certa implementazione disponibili in Visual Studio (usato ad esempio dai progettisti), ma che è solo interno.

CodeSnippetStatement è un nodo CodeDOM che permette di inserire qualsiasi stringa nel codice generato. Se si desidera creare CodeDOM albero solo per generare codice sorgente C #, che questo è di solito va bene (il generatore di codice sorgente si limita a stampare la stringa per l'uscita). Se il motore WF ha bisogno di capire il codice nella stringa (e non solo generare il codice sorgente e compilarlo), che CodeSnippetStatement non funzionerà.

Tuttavia, ci sono 3rd strumenti di terze parti che possono essere utilizzati per l'analisi del codice sorgente C #. In un progetto ho lavorato su, abbiamo usato NRefactory biblioteca (che viene utilizzato in SharpDevelop) e ha funzionato abbastanza bene. Ti dà qualche albero (AST) che rappresenta il codice analizzato e temo sarà necessario convertire questo all'albero CodeDOM corrispondente da soli.

Altri suggerimenti

Ho trovato un'implementazione libreria qui che sembra coprire più o meno tutto quello che mi serve per i miei scopi. Non so se è abbastanza robusto per essere utilizzato in scenari di business, ma per i miei test di unità è più o meno tutto quello che posso chiedere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top