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"));
            }
        }
    }

.

È stato utile?

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.

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