Procédure pas à pas : débogage d'un modèle de texte accédant à un modèle
Quand vous modifiez ou ajoutez des modèles de texte dans une solution de langage spécifique à un domaine, des erreurs peuvent survenir lorsque le moteur transforme le modèle en code source ou lorsqu’il compile le code généré. La procédure pas à pas suivante illustre certaines actions que vous pouvez effectuer pour déboguer un modèle de texte.
Notes
Pour plus d’informations générales sur les modèles de texte, consultez Génération de code et modèles de texte T4. Pour plus d’informations sur le débogage des modèles de texte, consultez Procédure pas à pas : débogage d’un modèle de texte.
Création d’une solution de langage spécifique à un domaine
Dans cette procédure, vous créez une solution de langage dédié qui présente les caractéristiques suivantes :
Nom : DebuggingTestLanguage
Modèle de solution : Minimal Language
Extension de fichier : .ddd
Nom de l’entreprise : Fabrikam
Pour plus d’informations sur la création d’une solution de langage spécifique à un domaine, consultez Guide pratique pour créer une solution de langage spécifique à un domaine.
Création d’un modèle de texte
Ajoutez un modèle de texte à votre solution.
Pour créer un modèle de texte
Générez la solution et commencez à l’exécuter dans le débogueur. (Dans le menu Générer, cliquez sur Reconstruire la solution, puis dans le menu Déboguer, cliquez sur Démarrer le débogage.) Une nouvelle instance de Visual Studio ouvre le projet Débogage.
Ajoutez un fichier texte nommé
DebugTest.tt
au projet Débogage.Assurez-vous que la propriété Outil personnalisé de DebugTest.tt est définie sur
TextTemplatingFileGenerator
.
Directives de débogage qui accèdent à un modèle à partir d’un modèle de texte
Pour pouvoir accéder à un modèle à partir des instructions et expressions d’un modèle de texte, vous devez commencer par appeler un processeur de directive généré. En appelant le processeur de directive généré, les classes de votre modèle deviennent disponibles pour le code du modèle de texte en tant que propriétés. Pour plus d’informations, consultez Accès aux modèles à partir de modèles de texte.
Dans les procédures suivantes, vous allez déboguer un nom de directive incorrect et un nom de propriété incorrect.
Pour déboguer un nom de directive incorrect
Remplacez le code dans DebugTest.tt par le code suivant :
Notes
Le code contient une erreur. Vous introduisez l’erreur afin de la déboguer.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ modelRoot processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #> Model: <#= this.ExampleModel #> <# foreach (ExampleElement element in this.ExampleModel.Elements) { #> Element: <#= element.Name #> <# } #>
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur DebugTest.tt, puis cliquez sur Exécuter un outil personnalisé.
La fenêtre Liste d’erreurs affiche cette erreur :
Le processeur nommé « DebuggingTestLanguageDirectiveProcessor » ne prend pas en charge la directive nommée « modelRoot ». La transformation ne sera pas exécutée.
Dans ce cas, l’appel de directive contient un nom de directive incorrect. Vous avez spécifié
modelRoot
comme nom de directive, alors que le nom de directive correct estDebuggingTestLanguage
.Double-cliquez sur l’erreur dans la fenêtre Liste d’erreurs pour accéder au code.
Pour corriger le code, remplacez le nom de la directive par
DebuggingTestLanguage
.La modification est mise en évidence.
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur DebugTest.tt, puis cliquez sur Exécuter un outil personnalisé.
Le système transforme ensuite le modèle de texte et génère le fichier de sortie correspondant. Aucune erreur n’est affichée dans la fenêtre Liste d’erreurs.
Pour déboguer un nom de propriété incorrect
Remplacez le code dans DebugTest.tt par le code suivant :
Notes
Le code contient une erreur. Vous introduisez l’erreur afin de la déboguer.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #> Model: <#= this.ExampleModel #> <# foreach (ExampleElement element in this.ExampleModel.Elements) { #> Element: <#= element.Name #> <# } #>
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur DebugTest.tt, puis cliquez sur Exécuter un outil personnalisé.
La fenêtre Liste d’erreurs s’affiche avec l’une des erreurs suivantes :
(C#)
Compilation de la transformation : Microsoft.VisualStudio.TextTemplating<GUID>. GeneratedTextTransformation ne contient pas de définition pour « ExampleModel »
(Visual Basic)
Compilation de la transformation : « ExampleModel » n’est pas membre de « Microsoft.VisualStudio.TextTemplating<GUID>. GeneratedTextTransformation ».
Dans ce cas, le code du modèle de texte contient un nom de propriété incorrect. Vous avez spécifié
ExampleModel
comme nom de propriété, alors que le nom de propriété correct estLibraryModel
. Le nom de propriété correct se trouve dans le paramètre fourni, comme dans le code suivant :<#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
Double-cliquez sur l’erreur dans la fenêtre Liste d’erreurs pour accéder au code.
Pour corriger le code, remplacez le nom de la propriété par
LibraryModel
dans le code du modèle de texte.Les modifications sont mises en surbrillance.
<#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#> <#@ output extension=".txt" #> <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #> Model: <#= this.LibraryModel #> <# foreach (ExampleElement element in this.LibraryModel.Elements) { #> Element: <#= element.Name #> <# } #>
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur DebugTest.tt, puis cliquez sur Exécuter un outil personnalisé.
Le système transforme ensuite le modèle de texte et génère le fichier de sortie correspondant. Aucune erreur n’est affichée dans la fenêtre Liste d’erreurs.