2011-10-20 16 views
14

Por ejemplo, he¿Puedo usar Roslyn para la reescritura del código de tiempo de compilación?

class Foo: INotifyPropertyChanged { 
    public event PropertyChangedEventHandler PropertyChanged; 
    public int Bar {get;set;} 
} 

¿Puedo obtener la clase Foo AST y reescribir bar, en tiempo de compilación, a

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

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

.

+1

FYI puede hacerlo hoy con esta https://github.com/SimonCropp/Fody – Simon

+1

Se movió la ubicación de ese código. Ahora está en [github.com/Fody/Fody](http://github.com/Fody/Fody) – JKor

Respuesta

15

Redacción de tiempo de compilación no es directamente compatible con Roslyn hoy en día, pero las transformaciones sintácticas y semánticas definitivamente lo son. De hecho, eche un vistazo a la muestra "ImplementNotifyPropertyChanged" incluida en el CTP para ver algo de lo que desea hacer. La muestra se implementa como una transformación de tiempo de diseño en la función IDE, pero puede extraer la lógica y convertirla en algo así como una tarea previa a la compilación que reescribe los archivos antes de la compilación.

+3

Ivan Towlson también blogueó sobre la implementación automática de 'DependencyProperty' - http://www.mindscapehq.com/blog/index .php/2011/10/20/in-bed-with-roslyn/ –

+0

ahora en 2014, así que 2,5 años después: ¿Sigue siendo correcta esta respuesta? – jeromerg

+0

Sí. NO estamos construyendo deliberadamente ganchos de compilación, ya que nos gustaría ver qué tipo de cosas construye la comunidad y qué escenarios surgen primero para que podamos construir los ganchos * adecuados * si/cuando lo hacemos. –

2

No creo que esto sea posible en el CTP actual que se ha lanzado ya que el compilador está allí como servicio, pero no hay tal cosa que le permita conectarse al proceso de compilación como lo puede hacer en Nemerle.

Cuestiones relacionadas