Generación de código y plantillas de texto T4Code Generation and T4 Text Templates

En Visual Studio, una plantilla de texto T4 es una mezcla de bloques de texto y lógica de control que puede generar un archivo de texto.In Visual Studio, a T4 text template is a mixture of text blocks and control logic that can generate a text file. La lógica de control se escribe en forma de fragmentos de código de programa en Visual C#Visual C# o Visual BasicVisual Basic.The control logic is written as fragments of program code in Visual C#Visual C# or Visual BasicVisual Basic. En Visual Studio 2015 Update 2 y versiones posteriores, puede usar las características de la versión 6.0 de C# en las directivas de plantillas T4.In Visual Studio 2015 Update 2 and later, you can use C# version 6.0 features in T4 templates directives. El archivo generado puede ser texto de cualquier tipo, como una página web, un archivo de recursos o código fuente de programa en cualquier lenguaje.The generated file can be text of any kind, such as a web page, or a resource file, or program source code in any language.

Hay dos tipos de plantillas de texto T4: tiempo de ejecución y tiempo de diseño.There are two kinds of T4 text templates: run time and design time.

Plantillas de texto T4 de tiempo de ejecuciónRun time T4 text templates

También conocido como plantillas "preprocesadas", las plantillas de tiempo de ejecución se ejecutan en la aplicación para generar cadenas de texto, normalmente como parte de la salida.Also known as 'preprocessed' templates, run time templates are executed in your application to produce text strings, typically as part of its output. Por ejemplo, podría crear una plantilla para definir una página HTML:For example, you could create a template to define an HTML page:

<html><body>
 The date and time now is: <#= DateTime.Now #>
</body></html>

Observe que la plantilla es similar a la salida generada.Notice that the template resembles the generated output. La similitud de la plantilla con la salida resultante le ayudará a evitar errores cuando quiera cambiarla.The similarity of the template to the resulting output helps you avoid mistakes when you want to change it.

Además, la plantilla contiene fragmentos de código de programa.In addition, the template contains fragments of program code. Puede usar estos fragmentos para repetir secciones de texto, crear secciones condicionales y mostrar datos de la aplicación.You can use these fragments to repeat sections of text, to make conditional sections, and to show data from your application.

Para generar la salida, la aplicación llama a una función generada por la plantilla.To generate the output, your application calls a function that is generated by the template. Por ejemplo:For example:

string webResponseText = new MyTemplate().TransformText();

La aplicación se puede ejecutar en un equipo que no tenga instalado Visual Studio.Your application can run on a computer that does not have Visual Studio installed.

Para crear una plantilla en tiempo de ejecución, agregue un archivo de plantilla de texto preprocesada al proyecto.To create a run-time template, add a Preprocessed text template file to your project. Como alternativa, puede agregar un archivo de texto sin formato y establecer su propiedad Herramienta personalizada en TextTemplatingFilePreprocessor.Alternatively, you can add a plain text file and set its Custom Tool property to TextTemplatingFilePreprocessor.

Para obtener más información, vea generación de texto en tiempo de ejecución con plantillas de texto T4.For more information, see Run-Time Text Generation with T4 Text Templates. Para obtener más información sobre la sintaxis de las plantillas, vea escribir una plantilla de texto T4.For more information about the syntax of templates, see Writing a T4 Text Template.

Plantillas de texto T4 en tiempo de diseñoDesign time T4 text templates

Las plantillas en tiempo de diseño definen parte del código fuente y otros recursos de la aplicación.Design time templates define part of the source code and other resources of your application. Normalmente, se usan varias plantillas que leen los datos en un único archivo de entrada o base de datos, y se generan algunos de los archivos . CS, . VBu otros archivos de código fuente.Typically you use several templates that read the data in a single input file or database, and generate some of your .cs, .vb, or other source files. Cada plantilla genera un archivo.Each template generates one file. Se ejecutan dentro de Visual Studio o MSBuild.They are executed within Visual Studio or MSBuild.

Por ejemplo, los datos de entrada podrían ser un archivo XML de datos de configuración.For example, your input data could be an XML file of configuration data. Siempre que edite el archivo XML durante el desarrollo, las plantillas de texto regenerarán parte del código de la aplicación.Whenever you edit the XML file during development, the text templates regenerate part of the application code. Una de las plantillas podría parecerse al siguiente ejemplo:One of the templates could resemble the following example:

<#@ output extension=".cs" #>
<#@ assembly name="System.Xml" #>
<#
 System.Xml.XmlDocument configurationData = ...; // Read a data file here.
#>
namespace Fabrikam.<#= configurationData.SelectSingleNode("jobName").Value #>
{
  ... // More code here.
}

En función de los valores del archivo XML, el archivo . CS generado sería similar al siguiente:Depending on the values in the XML file, the generated .cs file would resemble the following:

namespace Fabrikam.FirstJob
{
  ... // More code here.
}

A modo de ejemplo, la entrada podría ser un diagrama del flujo de trabajo de una actividad profesional.As another example, the input could be a diagram of workflow in a business activity. Si los usuarios cambian su flujo de trabajo profesional, o si empieza a trabajar con nuevos usuarios que tienen un flujo de trabajo diferente, es fácil regenerar el código para ajustarlo al nuevo modelo.When the users change their business workflow, or when you start work with new users who have a different workflow, it is easy to regenerate the code to fit the new model.

Las plantillas en tiempo de diseño permiten cambiar la configuración de manera más rápida y confiable cuando cambian los requisitos.Design-time templates make it quicker and more reliable to change the configuration when the requirements change. Normalmente, la entrada se define en términos de requisitos empresariales, como en el ejemplo de flujo de trabajo.Typically the input is defined in terms of business requirements, as in the workflow example. Esto permite analizar más fácilmente los cambios con los usuarios.This makes it easier to discuss the changes with your users. Por tanto, las plantillas en tiempo de diseño son una herramienta útil en un proceso de desarrollo ágil.Design-time templates are therefore a useful tool in an agile development process.

Para crear una plantilla en tiempo de diseño, agregue un archivo de plantilla de texto al proyecto.To create a design-time template, add a Text Template file to your project. Como alternativa, puede agregar un archivo de texto sin formato y establecer su propiedad Herramienta personalizada en TextTemplatingFileGenerator.Alternatively, you can add a plain text file and set its Custom Tool property to TextTemplatingFileGenerator.

Para obtener más información, vea generación de código en tiempo de diseño mediante plantillas de texto T4.For more information, see Design-Time Code Generation by using T4 Text Templates. Para obtener más información sobre la sintaxis de las plantillas, vea escribir una plantilla de texto T4.For more information about the syntax of templates, see Writing a T4 Text Template.

Note

El término modelo se usa a veces para describir los datos que una o varias plantillas leen.The term model is sometimes used to describe data read by one or more templates. El modelo puede tener cualquier formato y estar en cualquier tipo de archivo o base de datos.The model can be in any format, in any kind of file or database. No tiene que ser un modelo UML ni un modelo de lenguaje específico de dominio.It does not have to be a UML model or a Domain-Specific Language model. El término "modelo" solo indica que los datos se pueden definir en términos de conceptos de negocios, en lugar de parecerse al código.'Model' just indicates that the data can be defined in terms of the business concepts, rather than resembling the code.

El característica de transformación de plantillas de texto de denomina T4.The text template transformation feature is named T4.

Vea tambiénSee also