我可以使用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")); } } } 

Roslyn今天没有直接支持编译时重写,但语法和语义转换肯定是。 实际上,请查看CTP中包含的“ImplementNotifyPropertyChanged”示例,以查看您要执行的操作。 该示例在IDEfunction中实现为设计时转换,但您可以提取逻辑并使其成为类似于在编译之前重写文件的预构建任务。

我不认为这在当前已发布的CTP中是可能的,因为编译器作为服务存在,但是没有这样的东西可以让你像在Nemerle中那样插入编译过程。