Génération de code et modèles de texte T4Code Generation and T4 Text Templates

Dans Visual Studio, un modèle de texte T4 est un mélange de blocs de texte et la logique de contrôle qui peut générer un fichier texte.In Visual Studio, a T4 text template is a mixture of text blocks and control logic that can generate a text file. La logique de contrôle est écrite comme des fragments de code du programme en Visual C#Visual C# ou Visual BasicVisual Basic.The control logic is written as fragments of program code in Visual C#Visual C# or Visual BasicVisual Basic. Dans Visual Studio 2015 Update 2 et versions ultérieures, vous pouvez utiliser les fonctionnalités C# version 6.0 dans les directives de modèles T4.In Visual Studio 2015 Update 2 and later, you can use C# version 6.0 features in T4 templates directives. Le fichier généré peut être du texte de tout type, comme une page web, ou d’un fichier de ressources ou d’un code source de programme dans n’importe quel langage.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.

Il existe deux types de modèles de texte T4 : temps d’exécution et moment du design.There are two kinds of T4 text templates: run time and design time.

Modèles de texte T4 exécutionRun time T4 text templates

Également connu sous les modèles « prétraités », modèles d’exécution sont exécutées dans votre application pour produire des chaînes de texte, généralement dans le cadre de sa sortie.Also known as 'preprocessed' templates, run time templates are executed in your application to produce text strings, typically as part of its output. Par exemple, vous pouvez créer un modèle pour définir une page 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>

Remarquez que le modèle ressemble à la sortie générée.Notice that the template resembles the generated output. La ressemblance du modèle avec la sortie obtenue vous aide à éviter des erreurs quand vous voulez le modifier.The similarity of the template to the resulting output helps you avoid mistakes when you want to change it.

De plus, le modèle contient des fragments de code du programme.In addition, the template contains fragments of program code. Vous pouvez utiliser ces fragments pour répéter des sections de texte, organiser des sections conditionnelles et afficher des données de votre application.You can use these fragments to repeat sections of text, to make conditional sections, and to show data from your application.

Pour générer la sortie, votre application appelle une fonction générée par le modèle.To generate the output, your application calls a function that is generated by the template. Exemple :For example:

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

Votre application peut s’exécuter sur un ordinateur qui n’a pas installé Visual Studio.Your application can run on a computer that does not have Visual Studio installed.

Pour créer un modèle au moment de l’exécution, ajoutez un fichier Modèle de texte prétraité à votre projet.To create a run-time template, add a Preprocessed text template file to your project. Vous pouvez également ajouter un fichier texte brut et affecter à sa propriété Outil personnalisé la valeur TextTemplatingFilePreprocessor.Alternatively, you can add a plain text file and set its Custom Tool property to TextTemplatingFilePreprocessor.

Pour plus d’informations, consultez génération de texte d’exécution avec les modèles de texte T4.For more information, see Run-Time Text Generation with T4 Text Templates. Pour plus d’informations sur la syntaxe des modèles, consultez écriture d’un modèle de texte T4.For more information about the syntax of templates, see Writing a T4 Text Template.

Concevoir des modèles de texte T4 de tempsDesign time T4 text templates

Modèles de temps de conception définissent une partie du code source et autres ressources de votre application.Design time templates define part of the source code and other resources of your application. En général, vous utilisez plusieurs modèles qui lisent les données dans un seul fichier d’entrée ou de la base de données et générer certaines de vos .cs, .vb, ou d’autres fichiers sources.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. Chaque modèle génère un fichier.Each template generates one file. Ils sont exécutés dans Visual Studio ou MSBuild.They are executed within Visual Studio or MSBuild.

Par exemple, vos données d’entrée peuvent être un fichier XML de données de configuration.For example, your input data could be an XML file of configuration data. Chaque fois que vous modifiez le fichier XML pendant le développement, les modèles de texte régénérer la partie du code d’application.Whenever you edit the XML file during development, the text templates regenerate part of the application code. L’un des modèles peut ressembler à l’exemple suivant :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 fonction des valeurs dans le fichier XML, généré .cs fichier se présente comme suit :Depending on the values in the XML file, the generated .cs file would resemble the following:

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

Autre exemple : l’entrée peut être un diagramme de flux de travail dans une activité d’entreprise.As another example, the input could be a diagram of workflow in a business activity. Quand les utilisateurs modifient leur flux de travail d’entreprise ou que vous commencez à travailler avec de nouveaux utilisateurs qui ont un flux de travail différent, il est facile de régénérer le code pour l’adapter au nouveau modèle.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.

Les modèles au moment du design rendent la modification de la configuration plus rapide et plus fiable quand les spécifications changent.Design-time templates make it quicker and more reliable to change the configuration when the requirements change. En général, l’entrée est définie en termes de besoins de l’entreprise, comme dans l’exemple de flux de travail.Typically the input is defined in terms of business requirements, as in the workflow example. Cela facilite les discussions avec vos utilisateurs concernant les changements.This makes it easier to discuss the changes with your users. Par conséquent, les modèles au moment du design sont un outil utile dans un processus de développement agile.Design-time templates are therefore a useful tool in an agile development process.

Pour créer un modèle au moment du design, ajoutez un fichier Modèle de texte à votre projet.To create a design-time template, add a Text Template file to your project. Vous pouvez également ajouter un fichier texte brut et affecter à sa propriété Outil personnalisé la valeur TextTemplatingFileGenerator.Alternatively, you can add a plain text file and set its Custom Tool property to TextTemplatingFileGenerator.

Pour plus d’informations, consultez génération de Code au moment du Design à l’aide de modèles de texte T4.For more information, see Design-Time Code Generation by using T4 Text Templates. Pour plus d’informations sur la syntaxe des modèles, consultez écriture d’un modèle de texte T4.For more information about the syntax of templates, see Writing a T4 Text Template.

Note

Le terme modèle est parfois utilisé pour décrire les données lues par un ou plusieurs modèles.The term model is sometimes used to describe data read by one or more templates. Le modèle peut se présenter sous n’importe quel format, dans tout type de fichier ou de base de données.The model can be in any format, in any kind of file or database. Il n’est pas tenu d’être un modèle UML ni un modèle de langage spécifique à un domaine.It does not have to be a UML model or a Domain-Specific Language model. Le terme « modèle » indique seulement que les données peuvent être définies en termes de concepts d’entreprise, plutôt que de ressembler au code.'Model' just indicates that the data can be defined in terms of the business concepts, rather than resembling the code.

La fonctionnalité de transformation de modèle de texte est appelée T4.The text template transformation feature is named T4.

Voir aussiSee Also