Text Template Transformation Toolkit
Text Template Transformation Toolkit, généralement appelée T4, est un template Open Source inclus avec Visual Studio.

Les fichiers source T4 permettent de générer des fichiers automatiquement à chaque exécution du programme (RuntimeTextTemplate), ou à chaque compilation de la solution (TextTemplate); et sont généralement désignés par l'extension de fichier ".tt".

Histoire 
 2005 : Microsoft a sorti la première version de T4 en même temps que la sortie de Visual Studio 2005
 2008 : Microsoft l'inclut à la sortie de Visual Studio 2008
 2010 : Microsoft rajoute des nouvelles fonctionnalités pour améliorer les performances
 2017 : Le moteur de template devient Open source, et supporte .NET
 2019 : JetBrains supporte maintenant T4 dans leur produit Rider

Détails 
T4 est utilisé par les développeurs dans le cadre d'une application ou d'un framework pour automatiser la création de fichiers texte avec une variété de paramètres. Ces fichiers nouvellement générés peuvent être n'importe quel format de texte, tel que du code, XML, HTML ou XAML.
 
Pour utiliser un template T4, il faut disposer d’un environnement Visual Studio, d'une version supérieure à celle de 2005, et créer un fichier T4 dans notre solution.

Avantages 
Le gros avantage des T4 est d'automatiser la génération de code similaire ou redondant, par exemple, les fichiers DTOs, WebServices, DataEntities; mais aussi, dans des versions améliorés, des ServicesContracts, des Mappers et des Tests unitaires testant la nullabilité des arguments.

Les fichiers T4 ne se limitent pas qu'à la génération de code, mais aussi de tout type de fichier.

De plus, T4 ne nécessite pas d'installation

Inconvénients 
Il n'existe pas d'éditeur de fichier T4 natif. Les développeurs doivent  écrire leur code direction sur un fichier blanc, il existe néanmoins plusieurs extensions Visual Studio tel que Devart T4 Editor, ou alors des extenstions Notepad++.

De plus, le T4 est difficile à appréhender aux premiers abords, car elle possède sa propre syntaxe axée autour d'un système de balise.

Balises 
Le T4 possède quatre balises permettant des actions différentes :
 <# #> permet de saisir des instructions. Une instruction se compose de code .NET classique.
 <#@ #> Ce sont des balises utilisées au début du Template afin de spécifier son comportement. Les directives permettent notamment d'indiquer le type de fichier de sortie et les assembly utilisables dans les blocs d’instructions.
 <#= #> Ce bloc permet d’afficher le texte correspondant à la variable dans notre fichier de sortie.
 <#+ #> C'est un bloc de fonctionnalités de classe. Cette balise permet de définir des fonctions utilisables dans le Template. Attention les blocks de fonctionnalités doivent être déclarés à la fin du fichier ".tt".

Exemple 

L'exemple ci-dessous utilise les 4 différentes balises, et le package de référence TemplateFileManager permettant de générer plusieurs fichier en un T4.

<#@ template language="C#" hostspecific="true" #>
<#@ output extension="txt" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.IO" #>

<#@ include file="..\Packages\T4.TemplateFileManager.2.2.1\tools\ttinc\TemplateFilemanager.CS.ttinclude" #>

<#
var manager = TemplateFileManager.Create(this);
for(int i = 0 ; i < 10 ; i++)
{
	var filename = this.GetFilename(i);
    manager.StartNewFile(filename);
#>

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template at <#= DateTime.Now #>
//     File Declaration for the model : <#=filename#>             
// </auto-generated>
//------------------------------------------------------------------------------

Hello World !

<#
}
manager.Process();
#>

<#+ 
public string GetFilename(int number)
{
	return $"Say Hello ({i}).txt";
}
#>

Références

Liens externes 
 Génération de code et modèles de texte T4

.NET Framework
Logiciel libre
Logiciel libre sous licence MIT
Logiciel Microsoft
Moteur de template