Могу ли я использовать Roslyn для перезаписи кода времени компиляции?
Например, у меня есть
class Foo: INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public int Bar {get;set;}
}
Могу ли я получить класс Foo класса AST и переписать Bar во время компиляции
public string Bar
{
get { return this.bar; }
set
{
if (value != this.bar)
{
this.phoneNumberValue = value;
PropertyChanged(this, new PropertyChangedEventArgs("Bar"));
}
}
}
.
Ответы
Ответ 1
Повторная запись времени компиляции напрямую не поддерживается Roslyn, но, безусловно, синтаксические и семантические преобразования. В самом деле, взгляните на образец "ImplementNotifyPropertyChanged", включенный в CTP, чтобы увидеть что-то из того, что вы хотите сделать. Образец реализован как временное преобразование дизайна и функция IDE, но вы можете извлечь логику и сделать ее чем-то вроде задачи предварительной сборки, которая переписывает файлы перед компиляцией.
Ответ 2
Я не думаю, что это возможно в текущем CTP, который был выпущен, поскольку компилятор существует как служба, но нет такой вещи, которая позволяет вам подключаться к процессу компиляции, как вы можете сделать в Nemerle.