Partager via


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 :

Création d’un modèle de texte

Ajoutez un modèle de texte à votre solution.

Pour créer un modèle de texte

  1. 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.

  2. Ajoutez un fichier texte nommé DebugTest.tt au projet Débogage.

  3. 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

  1. 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 #>
    <#
    }
    #>
    
  2. 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 est DebuggingTestLanguage.

  3. Double-cliquez sur l’erreur dans la fenêtre Liste d’erreurs pour accéder au code.

  4. Pour corriger le code, remplacez le nom de la directive par DebuggingTestLanguage.

    La modification est mise en évidence.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
  5. 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

  1. 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 #>
    <#
    }
    #>
    
  2. 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 est LibraryModel. 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" #>
    
  3. Double-cliquez sur l’erreur dans la fenêtre Liste d’erreurs pour accéder au code.

  4. 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 #>
    <#
    }
    #>
    
  5. 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.