我可以使用Roslyn编译时代码重写

本文关键字:时代 代码 重写 编译 Roslyn 可以使 我可以 | 更新日期: 2023-09-27 18:11:53

例如

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编译时代码重写

目前Roslyn不直接支持编译时重写,但语法和语义转换肯定支持。实际上,请查看CTP中包含的"ImplementNotifyPropertyChanged"示例,了解您想要做的事情。该示例是作为IDE特性中的设计时转换实现的,但是您可以提取逻辑并将其转换为类似于在编译之前重写文件的预构建任务的内容。

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