El proceso de transformación de las plantillas de texto

El proceso de transformación de plantillas de texto toma un archivo de plantilla de texto como entrada y genera un nuevo archivo de texto como salida. Por ejemplo, puede usar plantillas de texto para generar código de Visual Basic o C#, o bien puede generar un informe HTML.

Tres componentes participan en este proceso: el motor, el host y los procesadores de directivas. El motor controla el proceso e interactúa con el host y el procesador de directivas para generar el archivo de salida. El host proporciona cualquier interacción con el entorno, como la búsqueda de archivos y ensamblados. El procesador de directivas agrega funcionalidad, como la lectura de datos de un archivo XML o una base de datos.

El proceso de transformación de la plantilla de texto se realiza en dos pasos. En primer lugar, el motor crea una clase temporal, que se conoce como la clase de transformación generada. Esta clase contiene el código generado por las directivas y los bloques de control. Después, el motor compila y ejecuta la clase de transformación generada para producir el archivo de salida.

Componentes

Componente Descripción Personalizable (Sí/No)
Motor El componente del motor controla el proceso de transformación de la plantilla de texto. No.
Host El host es la interfaz entre el motor y el entorno de usuario. Visual Studio es un host del proceso de transformación de texto. Sí. Puede escribir un host personalizado.
Procesadores de directivas Los procesadores de directivas son clases que controlan directivas en plantillas de texto. Puede usar directivas para proporcionar datos a una plantilla de texto desde un origen de entrada. Sí. Puede escribir sus procesadores de directivas personalizados.

Motor

El motor recibe la plantilla como una cadena del host, que controla todos los archivos que se usan en el proceso de transformación. A continuación, el motor pide al host que busque los procesadores de directivas personalizados y otros aspectos del entorno. El motor compila y ejecuta entonces la clase de transformación generada. El motor devuelve el texto generado al host, que normalmente guarda el texto en un archivo.

El host

El host es responsable de todo lo relacionado con el entorno fuera del proceso de transformación, incluido lo siguiente:

  • Buscar archivos binarios y de texto solicitados por el motor o un procesador de directivas. El host puede buscar en directorios y en la caché global de ensamblados para ubicar ensamblados. El host puede buscar código de un procesador de directivas personalizado para el motor. El host también puede buscar y leer archivos de texto y devolver su contenido como cadenas.

  • Proporcionar listas de ensamblados y espacios de nombres estándar que usa el motor para crear la clase de transformación generada.

  • Proporcionar el dominio de aplicación que se usa cuando el motor compila y ejecuta la clase de transformación generada. Se usa un dominio de aplicación independiente para proteger la aplicación host frente a errores en el código de plantilla.

  • Escribir el archivo de salida generado.

  • Establecer la extensión predeterminada para el archivo de salida generado.

  • Controlar los errores de transformación de plantillas de texto. Por ejemplo, el host puede mostrar los errores en la interfaz de usuario o escribirlos en un archivo. (En Visual Studio, los errores se muestran en la ventana Mensaje de error).

  • Proporcionar un valor de parámetro necesario si un usuario ha llamado a una directiva sin proporcionar un valor. El procesador de directivas puede especificar el nombre de la directiva y el parámetro y pedir al host que proporcione un valor predeterminado si lo tiene.

Directivas y procesadores de directivas

Una directiva es un comando de la plantilla de texto. Proporciona parámetros para el proceso de generación. Normalmente, las directivas definen el origen y el tipo del modelo u otra entrada, así como la extensión del nombre del archivo de salida.

Un procesador de directivas puede procesar una o varias directivas. Al transformar una plantilla, debe haber instalado un procesador de directivas que pueda tratar con las directivas de la plantilla.

Las directivas funcionan agregando código a la clase de transformación generada. Se llama a las directivas desde una plantilla de texto, y el motor procesa todas las llamadas de directiva cuando crea la clase de transformación generada. Tras llamar a una directiva correctamente, el resto del código que escribe en la plantilla de texto puede basarse en la funcionalidad que la directiva proporciona. Por ejemplo, puede realizar la siguiente llamada a la directiva import en la plantilla:

<#@ import namespace="System.Text" #>

El procesador de directivas estándar lo convierte en una instrucción using de la clase de transformación generada. A continuación, puede usar la clase StringBuilder en el resto del código de plantilla sin calificarla como System.Text.StringBuilder.