2012-09-24 16 views
5

He creado una plantilla simple en tiempo de diseño que usa una enumeración que reside en el mismo proyecto. La plantilla genera una definición de clase para cada variable en ese tipo de enumeración.Plantillas T4: ¿Alguna manera de hacer que la plantilla se ejecute cuando se modifica alguna clase que utiliza?

Me di cuenta de que cambiar y guardar el archivo .tt de todos modos hace que se vuelva a generar el código C#. Espero poder configurar la solución para que, si cambio la enumeración y luego la guarde, la plantilla también pueda volver a generar la fuente. De esa manera, cuando quiera agregar un nuevo tipo, podría agregar una variable a la definición de enum y tal vez solo presione guardar.

En el momento en que tienen que hacer esto:

  1. Agregar variable para la definición de enumeración en su archivo .cs.
  2. Vuelva a compilar el proyecto.
  3. Vaya a "ejecutar la herramienta personalizada" en el archivo .tt de la plantilla.
  4. y luego compilar nuevamente para compilar en la fuente generada t4.

Por lo tanto, tal vez hay una manera de hacer que la plantilla "detectar" un cambio en otra fuente con que se utiliza, y actuar como lo ha sido modificado en sí?

+0

Como siempre presiono "guardar" después de editar la enumeración, todo lo que necesito es que la plantilla se ejecute en ese momento. – Elliot

Respuesta

3
  1. Comience instalando T4 Toolbox. Agrega numerosas características que hacen que trabajar con archivos T4 sea mucho más fácil.

  2. Cambie la propiedad Herramienta personalizada de su archivo .cs al T4ScriptFileGenerator. Esto creará un nuevo archivo .tt debajo del archivo .cs. (Eche un vistazo a this blog post from Oleg Sych, el autor de T4 toolbox, para más información). Ahora, cada vez que guarde el archivo .cs original, T4 Toolbox ejecutará el archivo .tt correspondiente.

  3. En este nuevo archivo, puede agregar el código que lee la enumeración. Sin embargo, parece que está utilizando la reflexión en el ensamblaje generado, que requiere la reconstrucción del proyecto cada vez que realiza un cambio. Use Visual Studio EnvDTE para leer su enum. Usted tiene acceso al árbol de sintaxis abstracta de los archivos C# analizados en el IDE sin la necesidad de compilarlos.

+0

se ve genial, lo estoy viendo thx. – Elliot

+0

golpear un inconveniente: Estoy usando VS Express y no se instala con eso. Pero aún así, gracias por esta respuesta. – Elliot

Cuestiones relacionadas