C# 我可以使用Roslyn进行编译时代码重写吗?

C# 我可以使用Roslyn进行编译时代码重写吗?,c#,metaprogramming,compiler-as-a-service,roslyn,C#,Metaprogramming,Compiler As A Service,Roslyn,比如我有 class Foo: INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public int Bar {get;set;} } 我可以在编译时让Foo类AST和重写栏 public string Bar { get { return this.bar; } set {

比如我有

class Foo: INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;
    public int Bar {get;set;}
}
我可以在编译时让Foo类AST和重写栏

    public string Bar
    {
        get { return this.bar; }

        set 
        {
            if (value != this.bar)
            {
                this.phoneNumberValue = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Bar"));
            }
        }
    }

.

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

编译时重写现在没有Roslyn的直接支持,但句法和语义转换肯定是如此。事实上,看看CTP中包含的“ImplementNotifyPropertyChanged”示例,看看您想要做什么。该示例在和IDE功能中实现为设计时转换,但是,您可以提取逻辑并将其转换为类似于编译前重写文件的预构建任务。

Ivan Towlson还写了关于自动
dependencProperty
实现的博客-Java已经有注释,允许您在编译过程中挂钩并在编译时生成代码多年。不知何故,微软似乎不想保护我们,让我们中的一些人觉得你们对待我们就像对待孩子一样。Java中的注释(以及它们提供的生成/重新编译周期)肯定没有导致混乱或混乱,是一个非常健壮的系统。@KevinPilch Bisson再过一年,再过几次OSS发布,Roslyn中的AOP可能吗?现在,可能吗?再过一年。现在呢?仅供参考,你今天可以用这个来做这件事,因为代码的位置被移动了。现在是