Posso usar o Roslyn para reescrever o código de tempo de compilação?
-
27-10-2019 - |
Pergunta
Por exemplo, eu tenho
class Foo: INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public int Bar {get;set;}
}
Posso obter a classe Foo AST e a barra de reescrita, em tempo de compilação, para
public string Bar
{
get { return this.bar; }
set
{
if (value != this.bar)
{
this.phoneNumberValue = value;
PropertyChanged(this, new PropertyChangedEventArgs("Bar"));
}
}
}
.
Solução
A reescrita do tempo de compilação não é diretamente suportada por Roslyn hoje, mas as transformações sintáticas e semânticas definitivamente são.Na verdade, dê uma olhada no exemplo "ImplementNotifyPropertyChanged" incluído no CTP para ver algo do que você deseja fazer.O exemplo é implementado como uma transformação de tempo de design em um recurso IDE, mas você pode extrair a lógica e transformá-la em algo como uma tarefa de pré-construção que reescreve os arquivos antes da compilação.
Outras dicas
Não acho que isso seja possível no CTP atual que foi lançado, pois o compilador está lá como serviço, mas não existe tal coisa que permite que você se conecte ao processo de compilação como faria no Nemerle.