2012-04-26 11 views
19

È 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

+1

Buona domanda, mi sono chiesto recentemente questo tipo di cose. –

risposta

9

Questo è sicuramente uno scenario a cui stiamo pensando. Oggi ci sono un paio di problemi che lo rendono un po 'difficile:

  1. Non è possibile utilizzare le API di Workspace per caricare un progetto/una soluzione come si è già all'interno di msbuild.
  2. 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.

+0

Grazie, Kevin In attesa di nuove funzionalità Roslyn dal tuo team! –

+0

so che questo è del 2012. ci sono novità riguardo a questo? c'è un modo semplice ora? – riki

1

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".

2

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.

Problemi correlati