Partager via


Processus de transformation du modèle de texte

Le processus de transformation de modèle de texte prend un fichier de modèle de texte comme entrée et génère un nouveau fichier texte comme sortie. Par exemple, vous pouvez utiliser des modèles de texte pour générer du code Visual Basic ou C#, ou vous pouvez générer un rapport HTML.

Trois composants participent à ce processus : le moteur, l’hôte et les processeurs de directives. Le moteur contrôle le processus : il interagit avec l’hôte et le processeur de directives pour produire le fichier de sortie. L’hôte fournit toutes les interactions avec l’environnement, comme la localisation de fichiers et d’assemblys. Le processeur de directives ajoute des fonctionnalités, comme la lecture de données à partir d’un fichier XML ou d’une base de données.

Le processus de transformation de modèle de texte s’effectue en deux étapes. Tout d’abord, le moteur crée une classe temporaire, appelée classe de transformation générée. Cette classe contient le code généré par les directives et les blocs de contrôle. Après cela, le moteur compile et exécute la classe de transformation générée pour produire le fichier de sortie.

Composants

Composant Description Personnalisable (Oui/Non)
Moteur Le composant moteur contrôle le processus de transformation de modèle de texte Non.
Host L’hôte est l’interface entre le moteur et l’environnement utilisateur. Visual Studio est un hôte du processus de transformation de texte. Oui. Vous pouvez écrire un hôte personnalisé.
Processeurs de directives Les processeurs de directives sont des classes qui gèrent les directives dans les modèles de texte. Vous pouvez utiliser des directives pour fournir des données à un modèle de texte à partir d’une source d’entrée. Oui. Vous pouvez écrire des processeurs de directives personnalisés

Le moteur

Le moteur reçoit de l’hôte le modèle sous forme de chaîne, qui gère tous les fichiers utilisés dans le processus de transformation. Le moteur demande ensuite à l’hôte de localiser les processeurs de directives personnalisés et d’autres aspects de l’environnement. Le moteur compile et exécute ensuite la classe de transformation générée. Le moteur renvoie le texte généré à l’hôte, qui enregistre normalement le texte dans un fichier.

L’hôte

L’hôte est chargé de tout ce qui concerne l’environnement en dehors du processus de transformation, y compris les éléments suivants :

  • Localisation des fichiers texte et binaires demandés par le moteur ou un processeur de directives. L’hôte peut effectuer des recherches dans les répertoires et le Global Assembly Cache pour localiser les assemblys. L’hôte peut localiser le code du processeur de directives personnalisé pour le moteur. L’hôte peut également localiser et lire des fichiers texte, et retourner leur contenu sous forme de chaînes.

  • Fourniture de listes d’assemblys et d’espaces de noms standard utilisés par le moteur pour créer la classe de transformation générée.

  • Fourniture du domaine d’application utilisé quand le moteur compile et exécute la classe de transformation générée. Un domaine d’application distinct est utilisé pour protéger l’application hôte contre les erreurs de code du modèle.

  • Écriture du fichier de sortie généré.

  • Définition de l’extension par défaut pour le fichier de sortie généré.

  • Gestion des erreurs de transformation de modèle de texte. Par exemple, l’hôte peut afficher les erreurs dans l’interface utilisateur ou les écrire dans un fichier. (Dans Visual Studio, les erreurs s’affichent dans la fenêtre de message d’erreur.)

  • Fourniture d’une valeur de paramètre obligatoire si un utilisateur a appelé une directive sans fournir de valeur. Le processeur de directives peut spécifier le nom de la directive et du paramètre et demander à l’hôte de fournir une valeur par défaut s’il en a une.

Directives et processeurs de directives

Une directive est une commande dans votre modèle de texte. Elle fournit des paramètres au processus de génération. En règle générale, les directives définissent la source et le type du modèle ou d’une autre entrée, ainsi que l’extension de nom du fichier de sortie.

Un processeur de directives peut traiter une ou plusieurs directives. Quand vous transformez un modèle, vous devez avoir installé un processeur de directives qui peut traiter les directives dans votre modèle.

Les directives fonctionnent en ajoutant du code à la classe de transformation générée. Vous appelez des directives à partir d’un modèle de texte, et le moteur traite tous les appels de directive quand il crée la classe de transformation générée. Après avoir appelé une directive, le reste du code que vous écrivez dans votre modèle de texte peut dépendre des fonctionnalités fournies par la directive. Par exemple, vous pouvez effectuer l’appel suivant à la directive import dans votre modèle :

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

Le processeur de directives standard convertit cette valeur en instruction using dans la classe de transformation générée. Vous pouvez ensuite utiliser la classe StringBuilder dans le reste de votre code de modèle sans la qualifier de System.Text.StringBuilder.