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

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

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 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, simplement déboguer l’application à laquelle il appartient.

Pour déboguer un modèle de texte, vous devez comprendre les étapes du processus de transformation du modèle. Différents types d’erreurs peuvent se produire au sein de chaque étape. Voici les étapes à suivre.

ÉtapeModèle de conception : quand il se produitModèle d’exécution : quand il se produit
Code est généré à partir du modèle de texte.

Erreurs dans les directives, incompatibles ou TROUBLES <#…#> balises.
Lorsque vous enregistrez le modèle ou appelez la transformation de texte.Lorsque vous enregistrez le modèle ou appelez la transformation de texte.
Code généré est compilé.

Erreurs de compilation dans votre code de modèle.
Immédiatement après l’étape précédente.Avec le 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 figurent 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 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 de débogage de la façon habituelle.

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

Message d'erreurDescriptionSolution
Échec de chargement de 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.Assurez-vous que la classe spécifiée existe et qu’il existe dans l’assembly 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é.N’oubliez pas que le chemin d’accès est relatif au chemin du modèle d’origine, ou que le fichier est dans un emplacement qui est enregistré avec l’ordinateur hôte, ou qu’il existe 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 n’est pas exécutée.Se produit lorsque la méthode 'Initialize()' de la classe de transformation a échoué ou retourne la valeur false.Le code dans la fonction Initialize() provient de la classe de transformation de base spécifiée dans la <#@template#> directive et processeurs de directive. L’erreur ayant provoqué l’échec probablement l’initialisation est sur la liste d’erreurs. Recherchez la raison de l’échec. Vous pouvez consulter le code généré réel pour Initialize() en suivant les procédures pour déboguer un modèle.
L’assembly '{0}' pour le processeur de directive '{1}' n'a pas été accordé le jeu d’autorisations FullTrust. 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 d’autorisations de confiance totale à un assembly contenant un processeur de directive. Le message fournit le nom de l’assembly et le nom du processeur de directive.N’oubliez pas que vous utilisez uniquement des assemblys approuvés sur l’ordinateur local.
Le chemin d’accès '{0}' doit être local sur cet ordinateur ou partie de votre zone de confiance.Se produit lorsqu’une directive ou une directive d’assembly fait référence à un fichier qui n’est pas sur votre ordinateur local ou sur la zone de confiance de votre réseau.Assurez-vous que le répertoire dans lequel se trouvent la directive ou les directives d’assembly est dans votre zone de confiance. Vous pouvez ajouter un répertoire réseau à votre zone de confiance d’Internet Explorer.
Plusieurs erreurs de syntaxe telles que « Non valide jeton ' 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 de génération standard.Vérifier le numéro de la fermeture d’accolades et crochets à l’intérieur des délimiteurs de code.
Boucles ou conditions non compilé ou exécuté correctement. Par exemple : <#if (i>10)#> Number is: <#= i #>.

Ce code retourne toujours la valeur d’i. Uniquement « nombre est : « conditionnel.
En c#, vous devez toujours utiliser accolades pour encadrer 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 de traitement d’un modèle au moment du design ou de la compilation d’un modèle d’exécution (prétraité).

 Visual Studio cesse de fonctionner lorsque vous tentez d’inspecter le code généré par un modèle d’exécution.
Bloc de texte est trop long. T4 convertit des blocs de texte à une expression de concaténation de chaîne, avec une chaîne littérale pour chaque ligne de modèle. 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 telles que :

 <#= "" #>

Le tableau suivant répertorie les avertissements les plus courants avec leurs correctifs, s’il est disponible.

Message d'avertissementDescriptionSolution
Chargement du fichier include '{0}' 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 de fichier du fichier inclus.Supprimez la directive include ou assurez-vous que le fichier a un contenu.
Compilation de la transformation :Ajoute cette chaîne à toutes les erreurs ou avertissements du compilateur d’origine lors de la compilation de la transformation. Cela signifie que le compilateur a généré 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 complet si la DLL se trouve 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.
Il y a une erreur de chargement du fichier include '{0}'. La directive include sera ignorée.Se produit lorsque vous ne trouvez pas un fichier spécifié dans un include directive. 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 un des répertoires include qui sont enregistrés avec l’ordinateur hôte.
Une classe de base non valide a été spécifiée pour la classe de Transformation. La classe de base doit dériver de Microsoft.VisualStudio.TextTemplating.TextTransformation.Se produit lorsque le inherits paramètre dans 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 d’une directive de modèle est spécifié correctement. Le message fournit le numéro de ligne de la directive de modèle.Modifier le paramètre de culture pour 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 « true » ou « false ». La valeur par défaut « False » sera utilisé.Se produit lorsque le debug paramètre dans une directive de modèle spécifié est incorrect. 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 soit « true » ou « false ». La valeur par défaut « False » sera utilisé.Se produit lorsque le paramètre spécifique à l’hôte dans un template directive spécifiée est incorrect. Le message fournit le numéro de ligne de la directive de modèle.Définissez le paramètre spécifique à l’hôte à « 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 être utilisée.Se produit lorsqu’un langage non pris en charge est spécifié dans la template directive. Seuls « C# » ou « VB » sont autorisés (majuscules ou minuscules). Le message fournit le numéro de ligne de la directive de modèle.Définir le language paramètre dans la directive de modèle « C# » ou « VB ».
Plusieurs directives de sortie ont été trouvées dans le modèle. Tout sauf la première 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 en double.Supprimer les doublons output directives.
Plusieurs directives de modèle ont été trouvées dans le modèle. Tout sauf la première 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 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 template directives en un seul template 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 un custom directive, mais ne fournissent pas une processor attribut. Le message fournit le nom de la directive et le numéro de ligne.Fournir un processor attribut avec le nom de la directive processeur de directive.
Un processeur nommé '{0}' est introuvable pour la directive « {{1} ». La directive sera ignorée.Se produit lorsque le système ne peut pas trouver le directive processeur que vous avez spécifié dans un custom directive. Le message fournit le nom de la directive, nom du processeur et le numéro de ligne de la directive.Définir les processor l’attribut de la directive le nom du processeur de directive.
Un paramètre requis '{0}' pour la directive '{1}' est 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 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 pour le fichier '{0}' provoque une boucle infinie.Affiche 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 circulaire de directives include.
Exécution de la transformation :Ajoute cette chaîne à toutes les erreurs ou avertissements générés pendant 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 blocs imbriqués dans le modèle.Affichée lorsque vous avez une < # ou #>. Autrement dit, 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. Le message fournit le numéro de ligne de la balise ne correspondent pas.Supprimez la balise de début ou de fin ne correspondent pas, ou utiliser 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 dans le 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è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 le nom du type, un assembly, et un 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 est survenu lors du chargement de l'assembly '{0}'Se produit lorsqu’il existe un problème de chargement d’un assembly. Le message fournit le nom de l’assembly.Vous pouvez spécifier des assemblys à charger dans <@#assembly#> directives et par les processeurs de directive. Le message d’erreur qui suit cette chaîne doit fournir plus de données sur l’échec du chargement de l’assembly.
Il y a un problème de création et l’initialisation du processeur de directive « {{1} ». Le type du processeur est {0}. La directive sera ignorée.Se produit lorsque le système peut ne pas créer ou initialiser un processeur de directive. Le message fournit le nom et 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 savoir pourquoi la méthode Initialize() du processeur de directive échoue. Pour plus d’informations, consultez résolution des problèmes des 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.N’oubliez pas que les paramètres au processeur de directive sont corrects.
L’hôte a levé une exception lorsqu’il tente de résoudre la référence d’assembly '{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 l’assembly référencement de la chaîne.Assembly proviennent de références <@#assembly#> directives et processeurs de directive. Assurez-vous que le paramètre 'name' fourni dans le paramètre d’assembly est correct.
Essayez de spécifier la valeur {1} non pris en charge '{0}' pour la directive {2}Se produit par la classe RequiresProvidesDirectiveProcessor (tous nos processeurs de directive générés dérivent), lorsque vous fournissez un non pris en charge requiert ou fournit l’argument.N’oubliez pas que les noms dans le name = 'value' paires fournis dans le requiert et fournit des paramètres sont corrects.
Afficher: