Posso usare Roslyn per la riscrittura del timecode di compilazione?
-
27-10-2019 - |
Domanda
Ad esempio, ho
class Foo: INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public int Bar {get;set;}
}
Posso ottenere la classe Foo AST e riscrivere Bar, in fase di compilazione, in
public string Bar
{
get { return this.bar; }
set
{
if (value != this.bar)
{
this.phoneNumberValue = value;
PropertyChanged(this, new PropertyChangedEventArgs("Bar"));
}
}
}
.
Soluzione
La riscrittura in fase di compilazione non è supportata direttamente da Roslyn oggi, ma sicuramente le trasformazioni sintattiche e semantiche lo sono.In effetti, dai un'occhiata all'esempio "ImplementNotifyPropertyChanged" incluso nel CTP per vedere qualcosa di quello che vuoi fare.L'esempio è implementato come una trasformazione della fase di progettazione e una funzione IDE, ma puoi estrarre la logica e trasformarla in qualcosa di simile a un'attività di pre-compilazione che riscrive i file prima della compilazione.
Altri suggerimenti
Non penso che questo sia possibile nell'attuale CTP che è stato rilasciato poiché il compilatore è presente come servizio, ma non esiste alcuna cosa che ti permetta di collegarti al processo di compilazione come puoi fare in Nemerle.