Partager via


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

Vous pouvez définir des points d’arrêt dans des modèles de texte. Pour déboguer un modèle de texte au moment du design, enregistrez le fichier de modèle de texte, puis choisissez Déboguer le modèle T4 dans le menu contextuel du fichier dans l’Explorateur de solutions. Pour déboguer un modèle de texte au moment de l’exécution, déboguez simplement l’application à laquelle elle appartient.

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

Étape Modèle de temps de conception : moment de son occurrence Modèle d’exécution : quand cela se produit
Le code est généré à partir du modèle de texte.

Erreurs dans les directives, ou balises incompatibles ou désordonnées <#...#>.
Lorsque vous enregistrez le modèle ou appelez la transformation de texte. Lorsque vous enregistrez le modèle ou appelez la transformation de texte.
Le code généré est compilé.

Erreurs de compilation dans votre code de modèle.
Immédiatement après l’étape précédente. En plus du code de votre application.
Le code s’exécute.

Erreurs d’exécution dans votre code de modèle.
Immédiatement après l’étape précédente. Lorsque votre application s’exécute et appelle le code du modèle.

Dans la plupart des cas, les numéros de ligne dans le code du modèle sont donnés dans le rapport d’erreurs. Lorsque le rapport d’erreurs fait référence à un nom de fichier temporaire, la cause habituelle est un crochet incompatible dans le code du modèle de texte.

Vous pouvez définir des points d’arrêt dans des modèles de texte et déboguer de la façon habituelle.

Erreurs et correctifs courants

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

Message d'erreur Descriptif Solution
Impossible de charger la classe de base '{0}' à partir de laquelle la classe Transformation hérite. Se produit si vous ne trouvez pas la classe de base spécifiée dans le inherits paramètre dans une directive de modèle. Le message fournit le numéro de ligne de la directive de modèle. Vérifiez que la classe spécifiée existe et que l’assembly dans lequel il existe est spécifié dans une directive d’assembly.
Désolé... Nous n’avons pas pu résoudre l’ajout de texte pour le fichier :{0} Se produit lorsque vous ne trouvez pas de modèle inclus. Le message fournit le nom du fichier include demandé. Assurez-vous que le chemin d’accès au fichier est relatif au chemin d’accès du modèle d’origine, ou que le fichier se trouve dans un emplacement inscrit auprès de l’hôte, ou qu’il existe un chemin d’accès complet au fichier.
Les 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 l'initialisation « Initialize() » de la classe de transformation a échoué ou a retourné faux. Le code de la fonction Initialize() provient de la classe de transformation de base spécifiée dans la <directive #@template#> et des processeurs de directive. L’erreur qui a provoqué l’échec de l’initialisation se trouve probablement dans la liste d’erreurs. Examinez pourquoi elle a échoué. Vous pouvez examiner le code généré réel pour Initialize() en suivant les procédures de débogage d’un modèle.
L’assembly '{0}' pour le processeur de directive '{1}' n’a pas reçu le jeu d’autorisations FullTrust. Seuls les assemblages approuvés sont autorisés à fournir des processeurs de directives. Ce processeur de directives ne sera pas chargé. Se produit lorsque le système n’accorde pas d’autorisations FullTrust à un assembly contenant un processeur de directive. Le message fournit le nom de l’assembly et le nom du processeur de directive. Veillez à n'utiliser que des assemblies de confiance sur l’ordinateur local.
Le chemin d’accès «{0} » doit être local sur cet ordinateur ou dans une partie de votre zone approuvée. Se produit lorsqu’une directive ou une directive d’assembly fait référence à un fichier qui ne se trouve pas sur votre ordinateur local ou sur la zone approuvée de votre réseau. Assurez-vous que le répertoire où se trouvent les directives ou les directives d'assemblage est dans votre zone approuvée. Vous pouvez ajouter un répertoire réseau à votre zone approuvée via Internet Explorer.
Plusieurs erreurs de syntaxe telles que « Jeton non valide « catch » ou « Un espace de noms ne peut pas contenir directement des membres » Trop d’accolades fermantes dans votre code de modèle. Le compilateur le confond avec le code standard de génération. Vérifiez le nombre d’accolades et de crochets fermants à l’intérieur des délimiteurs de code.
Boucles ou conditions non compilées ou exécutées correctement. Par exemple : <#if (i>10)#> Number is: <#= i #>.

Ce code génère toujours la valeur i. Seul « Le nombre est : » est conditionnel.
En C#, utilisez toujours des accolades pour entourer les blocs de texte 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 au temps de conception ou de la compilation d’un modèle en cours d'exécution (prétraité).

Visual Studio cesse de fonctionner lors de la tentative d’inspection du code généré par un modèle d’exécution.
Le bloc de texte est trop long. T4 convertit les blocs de texte en expression de concaténation de chaîne, 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. Décomposez le bloc de texte long avec un bloc d’expression tel que :

<#= "" #>

Descriptions et correctifs d’avertissement

Le tableau suivant répertorie les avertissements les plus courants avec les correctifs, le cas échéant.

Message d’avertissement Descriptif 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 vide. Le message fournit le nom de fichier du fichier inclus. Supprimez la directive Include ou vérifiez que le fichier contient du contenu.
Compilation de la transformation : Ajoutez cette chaîne à toutes les erreurs ou avertissements provenant du compilateur lors de la compilation de la transformation. Cette chaîne signifie que le compilateur a généré une erreur ou une alerte. Si vous rencontrez un problème lors de la recherche de la DLL, vous devrez peut-être fournir le chemin d'accès complet ou un nom fort entièrement qualifié si la DLL se trouve dans le GAC.
Le paramètre '{0}' existe déjà dans la directive. Le paramètre dupliqué est 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 dupliquée.
Une erreur s’est produite lors du chargement du fichier include «{0} ». La directive Include est ignorée. Se produit lorsque vous ne trouvez pas un fichier spécifié dans une include directive. Le message fournit le nom du fichier et le numéro de ligne de la directive. Vérifiez 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 inscrits 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 inherits paramètre 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 être au format « xx-XX ». La culture invariante sera utilisée. Se produit lorsque le paramètre de culture dans une directive de modèle est spécifié de manière incorrecte. Le message fournit le numéro de ligne de la directive de modèle. Remplacez le paramètre de culture par une culture valide au 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 « true » ou « false ». La valeur par défaut « false » est utilisée. Se produit lorsque le debug paramètre d’une directive de modèle est spécifié de manière incorrecte. Le message fournit le numéro de ligne de la directive de modèle. Définissez le paramètre de débogage sur « true » ou « false ».
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 » est utilisée. Se produit lorsque le paramètre spécifique à l’hôte dans une template directive est spécifié de manière incorrecte. Le message fournit le numéro de ligne de la directive de modèle. Définissez le paramètre spécifique à l’hôte sur « true » ou « false ».
Un langage non valide '{0}' a été spécifié dans la directive 'template'. La langue doit être « C# » ou « VB ». La valeur par défaut de « C# » sera utilisée. Se produit lorsqu’une langue non prise en charge est spécifiée dans la template directive. Seuls « C# » ou « VB » sont autorisés (sans distinction de la casse). Le message fournit le numéro de ligne de la directive de modèle. Définissez le paramètre language dans la directive de modèle à « C# » ou « VB ».
Plusieurs directives de sortie ont été trouvées dans le modèle. Tout mais le premier sera ignoré. Se produit lorsque plusieurs output directives sont spécifiées dans un fichier de modèle. Le message fournit le numéro de ligne de la directive de sortie répétée. Supprimez les directives dupliquées output .
Plusieurs directives de modèle ont été trouvées dans le modèle. Tout mais le premier sera ignoré. Plusieurs paramètres de la directive de modèle doivent être spécifiés dans une directive de modèle. Se produit si vous spécifiez plusieurs template directives dans un fichier de modèle texte (y compris les fichiers inclus). Le message fournit le numéro de ligne de la directive de modèle dupliquée. Agréger les différentes template directives en une template seule directive.
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 custom directive, mais que vous ne fournissez pas d’attribut processor . Le message fournit le nom de la directive et le numéro de ligne. Fournissez un processor attribut avec le nom du directive processeur pour la directive.
Impossible de trouver un processeur nommé «{0} » pour la directive nommée «{1} ». La directive sera ignorée. Se produit lorsque le système ne trouve pas le directive processeur que vous avez spécifié dans une custom directive. Le message fournit le nom de la directive, le nom du processeur et le numéro de ligne de la directive. Définissez l’attribut processor dans la directive sur le nom du processeur de directive.
Un paramètre obligatoire '{0}' pour la directive '{1}' est introuvable. La directive sera ignorée. Se produit lorsque le système ne fournit pas de paramètre de directive requis. Le message indique le nom du paramètre manquant, le nom de la directive et le numéro de ligne. Indiquez 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 incriminant ainsi que le nom du processeur de directive. Corrigez le nom de la directive.
La directive Include pour le fichier '{0}' provoque une boucle infinie. Affiché si des directives d'inclusion circulaires sont spécifiées (par exemple, le fichier A inclut le fichier B, qui inclut le fichier A). Ne spécifiez pas de directives d'inclusion circulaire.
Transformation en cours d’exécution : Préfixe cette chaîne à toutes les 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 début ou de fin et que vous n’avez pas de blocs imbriqués dans le modèle. Affiché lorsque vous avez un # ou un #<inattendu>. Autrement dit, si vous avez un <# après une autre balise ouverte qui n’a pas été fermée, ou si vous avez un #> lorsqu’il n’y a pas d’étiquette ouverte non fermée avant celle-ci. Le message fournit le numéro de ligne de la balise incompatible. Supprimez la balise de début ou de fin incompatible, ou utilisez un caractère d’échappement.
Une directive a été spécifiée dans un format incorrect. La directive sera ignorée. Spécifiez la directive au format <#@ name [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 sous la forme <#@ name [parametername="parametervalue"]* #>. Pour plus d’informations, consultez directives de modèle 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. Vérifiez que le processeur de directive est enregistré correctement et que l’assembly existe.
Impossible de trouver le type '{0}' dans 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 le nom du type, de l'assembly et du processeur de directive. Vshost recherche les informations du processeur de directive (nom, assembly et type) dans le Registre. Vérifiez 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’assemblage. Vous pouvez spécifier des assemblies à charger dans <des directives @#assembly#> et par les processeurs de directives. Le message d’erreur suivant cette chaîne doit fournir plus de données sur la raison pour laquelle le chargement de l'assemblage a échoué.
Il y a eu un problème 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 n’a pas pu 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. Veillez à utiliser le processeur de directive approprié et que le processeur de directive a un constructeur public par défaut. Sinon, utilisez les options de débogage pour savoir pourquoi la méthode Initialize() du processeur de directive échoue. Pour plus d’informations, consultez Résolution des problèmes liés aux modèles de texte.
Une exception a été levée lors du 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 du processeur de directive sont corrects.
L’hôte a levé une exception en tentant de résoudre la référence d’assemblage « {0} ». Se produit lorsque 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 directives. Assurez-vous que le paramètre « name » fourni dans le paramètre d’assembly est correct.
Tentative de spécifier une valeur non prise en charge {1} '{0}' pour la directive {2} Se produit par l’élément RequiresProvidesDirectiveProcessor (tous nos processeurs de directive générés dérivent de celui-ci), lorsque vous fournissez une demande ou un argument non pris en charge. Assurez-vous que les noms des paires name='value' fournies dans les paramètres requires et provides sont corrects.