È possibile modificare il codice sorgente prima della compilazione utilizzando Roslyn all'interno dell'attività MSBuild sul server CI? Sono riuscito a fare ciò che voglio in VS, ma mi chiedo se sia possibile al di fuori di VS. Attualmente sto guardando le API di Workspace e le API del compilatore e sembrano essere lo strumento giusto per farlo, ma non sono ancora sicuro che sia possibile? In particolare, sono preoccupato di restituire i cambiamenti che ho fatto a MSBuild per consentirgli di continuare il suo lavoro.Modifica codice sorgente in fase di compilazione con Roslyn
risposta
Questo è sicuramente uno scenario a cui stiamo pensando. Oggi ci sono un paio di problemi che lo rendono un po 'difficile:
- Non è possibile utilizzare le API di Workspace per caricare un progetto/una soluzione come si è già all'interno di msbuild.
- Per utilizzare le normali API del compilatore, è necessario creare autonomamente una compilation che può essere un po 'di lavoro.
In futuro, vorremmo fornire un "Crea uno spazio di lavoro da una stringa della riga di comando csc/vbc", che renderebbe questo molto più semplice.
Dai un'occhiata a Hooking into the compiler (csc.exe or vbc.exe) itself e Problem with using Roslyn in a MS Build Task per alcune discussioni precedenti su questo.
Grazie, Kevin In attesa di nuove funzionalità Roslyn dal tuo team! –
so che questo è del 2012. ci sono novità riguardo a questo? c'è un modo semplice ora? – riki
non ho personalmente avuto modo di testare questo, (quindi se si vuole, il trattamento di questa "risposta" come commento), ma leggendo cose su Roslyn, soprattutto this blog, sembra che dovrebbe essere possible (guardare per il paragrafo "Riscrivi"
Apparentemente, è possibile costruire un albero di sintassi dall'origine (non troppo sorprendente per un compilatore, suppongo), quindi modificarlo utilizzando le API e infine riscriverlo in una stringa/file
Vedere anche MSDN sugli alberi di sintassi Roslyn concettualmente e questo walkthrough su "Trasformazione della sintassi".
per quanto riguarda la domanda sulla Problem with using Roslyn in a MS Build Task,
public class MyTask : Task
cambiare attività per AppDomainIsolatedTask è una soluzione rapida. Non ho un account msdn quindi lo posterò qui. Spero che possa aiutare.
- 1. Come modificare il codice sorgente utilizzando Roslyn?
- 2. Generazione di codice in fase di compilazione tramite script
- 3. errori fase di compilazione e codice irraggiungibile
- 4. Roslyn è lo strumento giusto per un controllo delle espressioni in fase di compilazione?
- 5. offsetof in fase di compilazione
- 6. Come iniettare codice C# in fase di compilazione?
- 7. Running PublicResXFileCodeGenerator in fase di compilazione
- 8. Collegamento al processo di compilazione di Roslyn
- 9. Generazione del codice semantico con roslyn
- 10. Compilazione sass/scss di ASP.NET in fase di esecuzione e in fase di compilazione?
- 11. Come compilare NSArray in fase di compilazione?
- 12. Codice sorgente offuscamento
- 13. Modifica codice groovy in fase di esecuzione nell'applicazione Grails
- 14. È valido "strlen()" in fase di compilazione?
- 15. Mappa due tipi in fase di compilazione
- 16. modifica sorgente iframe con jquery
- 17. Imporre fase di compilazione constexpr
- 18. Terminologia Java: perché l'errore in fase di compilazione e non l'eccezione in fase di compilazione?
- 19. Asserzioni in fase di compilazione in C++?
- 20. compilazione del codice sorgente su 2 diverse versioni di gcc
- 21. if/else in fase di compilazione?
- 22. Emit per DynamicAssembly con il codice di Roslyn RC
- 23. Codice di debug compilato in modo dinamico con Roslyn
- 24. Rilevamento costante in fase di compilazione C++
- 25. Qt - Errore 2 in fase di compilazione
- 26. Valori interi in fase di compilazione
- 27. C++ hexfloat parsing in fase di compilazione
- 28. Come affermare qualcosa in fase di compilazione in Java?
- 29. Clojure costanti in fase di compilazione
- 30. Enforza annotazioni java in fase di compilazione
Buona domanda, mi sono chiesto recentemente questo tipo di cose. –