Могу ли я использовать 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.