Partager via


Débogage d'un modèle de texte T4

Vous pouvez définir des points d'arrêt dans les modèles de texte.Pour déboguer un modèle de texte au moment de le design, sélectionnez Déboguez le modèle T4 dans le menu contextuel de l'explorateur de fichiers de modèle de texte en solution.Pour déboguer un modèle de texte au moment de l'exécution, déboguez simplement l'application à laquelle il appartient.

Pour déboguer un modèle de texte, vous devez comprendre les étapes du processus de transformation de modèle.Les différents types d'erreurs peuvent se produire dans chaque étape.Les étapes sont les suivantes :

Étape

Modèle au moment de le design : lorsque cela se produit

Modèle au moment de l'exécution : lorsque cela se produit

Le code est généré à partir de le modèle de texte.

Erreurs dans les directives, ou les balises mal adaptées ou désordonnées d' <#…#> .

Lorsque vous enregistrez le modèle ou appeler la transformation de texte.

Lorsque vous enregistrez le modèle ou appeler la transformation de texte.

Le code généré est compilé.

Erreurs de compilation dans votre code du modèle.

Immédiatement après l'étape précédente.

Avec votre code d'application.

Le code s'exécute.

Erreurs d'exécution dans votre code du modèle.

Immédiatement après l'étape précédente.

Lorsque votre application exécute et appelle le code du modèle.

Dans la plupart des cas, les numéros de ligne du code du modèle sont indiqués dans le rapport d'erreurs.Lorsque le rapport d'erreurs fait référence à un nom de fichier temporaire, cela est généralement dû à la présence d'un crochet non apparié dans le code du modèle de texte.

Vous pouvez définir des points d'arrêt dans les modèles de texte et les déboguer normalement.

Erreurs courantes et correctifs

Le tableau suivant répertorie les erreurs les plus courantes et leurs correctifs.

Message d'erreur

Description

Solution

Impossible de charger la classe de base '{0}' de laquelle la classe Transformation hérite.

Se produit si vous ne trouvez pas la classe de base spécifiée dans le paramètre inherits dans une directive de modèle.Le message fournit le numéro de ligne de la directive de modèle.

Assurez-vous que la classe spécifiée existe, et que l'assembly dans laquelle il existe est spécifié dans une directive d'assembly.

Impossible de résoudre le texte Include pour le fichier : {0}

Se produit lorsque vous ne trouvez pas un modèle inclus.Le message fournit le nom du fichier Include demandé.

Assurez-vous que le chemin d'accès de fichier est relatif au chemin d'accès de modèle d'origine, ou que le fichier se trouve à un emplacement inscrit auprès de l'hôte, ou qu'il y a un chemin d'accès complet au fichier.

Des erreurs ont été générées lors de l'initialisation de l'objet de transformation.La transformation ne sera pas exécutée.

Se produit lorsque la méthode 'Initialize()' de la classe de transformation échoue ou retourne la valeur false.

Le code dans la fonction Initialize() provient de la classe de transformation de base spécifiée dans la directive <#@template#> et les processeurs de directive.L'erreur qui a provoqué l'échec de l'initialisation figure probablement dans la liste d'erreurs.Étudiez pourquoi il a échoué.Vous pouvez regarder le code généré réel pour Initialize() en suivant les procédures pour déboguer un modèle.

Le jeu d'autorisations FullTrust n'a pas été accordé à l'assembly '{0}' du processeur de directive '{1}'.Seuls les assemblys approuvés sont autorisés à fournir des processeurs de directive.Ce processeur de directive ne sera pas chargé.

Se produit lorsque le système n'accorde pas les autorisations FullTrust à un assembly contenant un processeur de directive.Le message fournit le nom de l'assembly et le nom du processeur de directive.

Assurez-vous que vous utilisez uniquement des assemblys fiables sur l'ordinateur local.

Le chemin d'accès '{0}' doit être local par rapport à cet ordinateur ou faire partie de votre zone de confiance.

Se produit lorsqu'une directive ou une directive d'assembly référence un fichier qui ne se trouve pas sur votre ordinateur local ou dans la zone de confiance de votre réseau.

Assurez-vous que le répertoire où les directives d'assembly et la directive se trouvent sont dans votre zone de confiance.Vous pouvez ajouter un répertoire réseau à votre zone de confiance via Internet Explorer.

Plusieurs erreurs de syntaxe telles que le « Jeton 'catch non valide' » ou « Un espace de noms ne peut pas contenir directement des membres »

Trop d'accolades fermantes dans votre code du modèle.Le compilateur le confond avec le code de génération standard.

Vérifiez le nombre d'accolades et de crochets fermants à l'intérieur des délimiteurs de code.

Compilation ou exécution incorrecte de boucles ou de conditions.Par exemple :

<#if (i>10)#>
   Number is: <#= i #>.

Ce code affiche toujours la valeur "i".Seul "Number is:" est conditionnel.

En c#, utilisez toujours des accolades pour entourer les blocs de texte qui sont incorporés dans les instructions de contrôle.

Ajouter des accolades :

<#if (i>10) { #>
   Number is: <#= i #>.
<# } #>

"Expression trop complexe" lors du traitement d'un modèle de design ou de la compilation d'un modèle d'exécution (prétraité).

Visual Studio cesse de travailler lors d'une tentative d'inspection du code généré par un modèle de runtime.

Le bloc de texte est trop long.T4 convertit les blocs de texte en expression de concaténation de chaînes, avec un littéral de chaîne pour chaque ligne de modèle.Les blocs de texte très longs peuvent dépasser les limites de taille du compilateur.

Fractionner le bloc de texte long avec un bloc d'expression tel que :

<#= "" #>

Description des avertissements et correctifs

Le tableau suivant répertorie les avertissements les plus courants avec leurs correctifs, s'ils sont disponibles.

Message d'avertissement

Description

Solution

Le chargement du fichier Include '{0}' a retourné une chaîne null ou vide.

Se produit si un fichier de modèle de texte inclus est vierge.Le message fournit le nom du fichier inclus.

Supprimez la directive Include ou assurez-vous que le fichier a du contenu.

Compilation de la transformation :

Ajoute cette chaîne à l'ensemble des erreurs ou avertissements générés par le compilateur lorsqu'il compile la transformation.Cette chaîne signifie que le compilateur a levé une erreur ou un avertissement.

Si vous avez un problème à trouver la DLL, vous devrez peut-être fournir le chemin d'accès complet ou un nom fort qualifié complet si la DLL est dans le GAC.

Le paramètre '{0}' existe déjà dans la directive.Le paramètre en double sera ignoré.

Se produit lorsqu'un paramètre est spécifié plusieurs fois dans une directive.Le message fournit le nom du paramètre et le numéro de ligne de la directive.

Supprimez la spécification de paramètre en double.

Une erreur s'est produite lors du chargement du fichier Include '{0}'.La directive Include sera ignorée.

Se produit lorsque vous ne trouvez pas un fichier spécifié dans une directive include.Le message fournit le nom du fichier et le numéro de ligne de la directive.

Assurez-vous que le fichier Include existe dans le même répertoire que le fichier de modèle de texte d'origine ou dans l'un des répertoires Include inscrit auprès de l'hôte.

Une classe de base non valide a été spécifiée pour la classe Transformation.La classe de base doit dériver de Microsoft.VisualStudio.TextTemplating.TextTransformation.

Se produit lorsque le paramètre inherits d'une directive de modèle spécifie une classe qui n'hérite pas de TextTransformation.Le message fournit le numéro de ligne de la directive de modèle.

Spécifiez une classe qui dérive de TextTransformation.

Une culture non valide a été spécifiée dans la directive 'template'.La culture doit avoir le format "xx-XX".La culture Invariant sera utilisée.

Se produit lorsque le paramètre de culture d'une directive de modèle n'est pas spécifié correctement.Le message fournit le numéro de ligne de la directive de modèle.

Modifiez le paramètre de culture en une culture valide dans le format « xx-XX ».

Une valeur de débogage non valide '{0}' a été spécifiée dans la directive de modèle.La valeur de débogage doit être soit "true" soit "false".La valeur par défaut "false" sera utilisée.

Se produit lorsque le paramètre debug d'une directive de modèle n'est pas spécifié correctement.Le message fournit le numéro de ligne de la directive de modèle.

Affectez la valeur "true" ou "false" au paramètre de débogage.

Une valeur HostSpecific non valide '{0}' a été spécifiée dans la directive de modèle.La valeur HostSpecific doit être "true" ou "false".La valeur par défaut "false" sera utilisée.

Se produit lorsque le paramètre spécifique à l'hôte d'une directive template n'est pas spécifié correctement.Le message fournit le numéro de ligne de la directive de modèle.

Affectez la valeur "true" ou "false" au paramètre spécifique à l'hôte.

Un langage non valide '{0}' a été spécifié dans la directive « modèle ».Le langage doit être "C#" ou "VB".La valeur par défaut "C#" sera utilisée.

Se produit lorsqu'un langage non pris en charge est spécifié dans la directive template.Seules les valeurs "C#" ou "VB" sont autorisées (non sensibles à la casse).Le message fournit le numéro de ligne de la directive de modèle.

Affectez la valeur "C#" ou "VB" au paramètre language de la directive de modèle.

Plusieurs directives de sortie ont été trouvées dans le modèle.Toutes seront ignorées sauf la première.

Se produit lorsque plusieurs directives output sont spécifiées dans un fichier modèle.Le message fournit le numéro de ligne de la directive de sortie en double.

Supprimez les directives output en double.

Plusieurs directives de modèle ont été trouvées dans le modèle.Toutes seront ignorées sauf la première.Plusieurs paramètres de la directive de modèle doivent être spécifiés dans la directive à un modèle.

Se produit si vous spécifiez plusieurs directives template dans un fichier de modèle de texte (notamment les fichiers inclus).Le message fournit le numéro de ligne de la directive de modèle en double.

Regroupez les différentes directives template dans une directive template.

Aucun processeur n'a été spécifié pour une directive nommée '{0}'.La directive sera ignorée.

Se produit si vous spécifiez une directive custom, mais ne fournissez pas d'attribut processor.Le message fournit le nom de la directive et le numéro de ligne.

Fournissez un attribut processor avec le nom du processeur directive correspondant à la directive.

Un processeur nommé' {0}' n'a pas pu être trouvé pour la directive nommée' {1}.'La directive sera ignorée.

Se produit lorsque le système ne trouve pas le processeur directive que vous avez spécifié dans une directive custom.Le message fournit le nom de la directive, le nom du processeur et le numéro de ligne de la directive.

Affectez à l'attribut processor de la directive le nom du processus de directive.

Un paramètre obligatoire' {0}' pour la directive' {1}' était introuvable.La directive sera ignorée.

Se produit lorsque le système ne fournit pas un paramètre de directive obligatoire.Le message fournit le nom du paramètre manquant, le nom de la directive et le numéro de ligne.

Fournissez le paramètre manquant.

Le processeur nommé '{0}' ne prend pas en charge la directive nommée '{1}.'La directive sera ignorée.

Se produit lorsqu'un processeur de directive ne prend pas en charge une directive.Le message fournit le nom et le numéro de ligne de la directive incriminée, ainsi que le nom du processeur de directive.

Corrigez le nom de la directive.

La directive Include associée au fichier '{0}' génère une boucle infinie.

Affiché si les directives Include circulaires sont spécifiées (par exemple, fichier A inclut le fichier B, qui inclut le fichier A).

Ne spécifiez pas de directives Include circulaires.

Exécution de la transformation :

Ajoute cette chaîne à l'ensemble des erreurs ou avertissements générés lors de l'exécution de la transformation.

Non applicable.

Une balise de début ou de fin inattendue a été trouvée dans un bloc.Assurez-vous que vous n'avez pas mal tapé une balise de fin ou de début, et que vous n'avez pas de blocs imbriqués dans le modèle.

Affiché lorsque vous avez un <# ou #> inattendu.C'est-à-dire, si vous avez un <# après une autre balise ouverte qui n'a pas été fermée, ou que vous avez un #> lorsqu'il n'y a aucune balise ouverte non fermée avant lui.Le message fournit le numéro de ligne de la balise sans correspondance.

Supprimez la balise de fin ou de début incompatible ou utilisez un caractère d'échappement.

Une directive a été spécifiée dans le format incorrect.La directive sera ignorée. Spécifiez la directive dans #> de nom de <#@ de format [parametername= " parametervalue »] *

Affiché par l'analyseur si une directive n'est pas spécifiée dans le format correct.Le message fournit le numéro de ligne de la directive incorrecte.

Assurez -vous que toutes les directives sont dans #> de nom de <#@ de formulaire [parametername= " parametervalue »] *.Pour plus d’informations, consultez Directives de modèles de texte T4.

Impossible de charger l'Assembly '{0}' pour le processeur de directive inscrit '{1}'

{2}

Se produit lorsqu'un processeur de directive n'a pas pu être chargé par l'hôte.Le message identifie l'assembly fourni pour le processeur de directive et le nom du processeur de directive.

Assurez-vous que le processeur de directive est inscrit correctement et que l'assembly existe.

Impossible de trouver le type '{0}' dans l'Assembly' {1}' pour le processeur de directive inscrit '{2}'

{3}

Se produit lorsqu'un type de processeur de directive n'a pas pu être chargé à partir de son assembly.Le message fournit les noms du type, de l'assembly et du processeur de directive.

Le vshost recherche les informations de processeur de directive (nom, assembly et type) dans le Registre.Assurez-vous que le processeur de directive est inscrit correctement, et que le type existe dans l'assembly.

Un problème s'est produit lors du chargement de l'assembly '{0}'.

Se produit lorsqu'un problème survient lors du chargement d'un assembly.Le message fournit le nom de l'assembly.

Vous pouvez spécifier des assemblys à charger dans les directives <@#assembly #>, et par les processeurs de directive.Le message d'erreur qui suit cette chaîne doit fournir des données supplémentaires sur la cause ayant provoqué l'échec du chargement de l'assembly.

Un problème s'est produit lors de la création et de l'initialisation du processeur pour une directive nommée '{1}'.Le type du processeur est {0}.La directive sera ignorée.

Se produit lorsque le système ne parvient pas à créer ou initialiser un processeur de directive.Le message fournit le nom et le numéro de ligne de la directive et le type du processeur.

Assurez-vous que vous utilisez le processeur de directive correct, et que le processeur de directive a un constructeur public par défaut.Sinon, utilisez les options de débogage pour trouver pourquoi la méthode Initialize() du processeur de directive échoue.Pour plus d’informations, consultez Débogage d'un modèle de texte T4.

Une exception a été levée pendant le traitement d'une directive nommée '{0}'.

Se produit lorsqu'un processeur de directive lève une exception lors du traitement d'une directive.

Assurez-vous que les paramètres au processeur de directive sont corrects.

L'hôte a levé une exception en essayant de résoudre la référence d'assembly '{0}'.

Se produit si l'hôte lève une exception lorsqu'il tente de résoudre une référence d'assembly.Le message fournit la chaîne de référence d'assembly.

Les références d'assembly proviennent de directives <@#assembly#> et de processeurs de directive.Assurez-vous que le paramètre 'nom' fourni dans le paramètre d'assembly est correct.

Tentative de spécification d'une valeur {1} '{0}' pour la directive {2}

Produit par la classe RequiresProvidesDirectiveProcessor (tous nos processeurs de directive générés dérivent de cette dernière) lorsque vous fournissez un argument requires/provides non pris en charge.

Assurez-vous que les noms dans la paire name='value' fournie dans les paramètres requires et provides sont corrects.