T4 modèle et les paramètres d'exécution
Je suis la construction d'un plug-in dans VS 2010 et que je suis coincé à la génération T4.
Droit maintenant, j'ai mis en place (comme MSDN l'indique) une coutume T4 d'accueil pour générer mon T4 résultats et je l'utilise de cette façon:
const string content = @"c:\Simple.tt";
var engine = new Engine();
var host = new MyTemplateHost();
var result = engine.ProcessTemplate(File.ReadAllText(content), host);
foreach (CompilerError error in host.Errors)
{
Console.WriteLine(error.ErrorText);
}
Cela fonctionne jusqu'à ce que je passe un paramètre dans le Modèle. Dès que j'ai créer un paramètre dans le .tt le fichier Hôte, le freak out en disant qu'il ne sait pas comment le résoudre.
J'ai vu que vous pouvez utiliser le TemplateSession de le faire mais je n'arrive pas à comprendre comment le transmettre à mon Hôte?
Est-il une meilleure façon de générer du code à partir d'un .tt à l'aide de C# et de passer des paramètres au moment de l'exécution? Peut-être que je suis sur la mauvaise voie.
OriginalL'auteur Raffaeu | 2010-12-09
Vous devez vous connecter pour publier un commentaire.
Au sein de Visual Studio 2010, le T4 moteur de template a été radicalement changée.
Maintenant, vous pouvez exécuter directement un fichier de modèle et de passer n'importe quel paramètre type que vous voulez.
Cette déclaration permettra de traiter le modèle suivant:
De manière honnête, l'hôte n'est pas vraiment plus besoin de vous ...
Très utile merci. Fonctionne également en 2012. Après l'appel de
Initialize()
vous pouvez aussi vérifiertemplate.Errors.HasErrors
pour voir si les types ont été transmis correctement 🙂OriginalL'auteur Raffaeu
Si vous êtes à la construction d'un add-in pour VS, vous n'avez probablement pas besoin d'un hôte personnalisé, mais peut, au lieu d'utiliser la fonction intégrée contre l'hôte, par l'intermédiaire de son interface de service.
Découvrez ITextTemplating que le service de base de l'API, vous pouvez obtenir par moulage de votre DTE objet d'une IServiceProvider, puis en appelant la méthode GetService(typeof(STextTemplating))
Pour passer des paramètres, vous pouvez alors sidecast la ITextTemplating objet de ITextTemplatingSessionHost et définir la propriété de Session pour une mise en œuvre de ITextTemplatingSession. Une session est essentiellement juste un serializable sac de propriété. Il y a une banale à condition que TextTemplatingSession.
OriginalL'auteur GarethJ
Ajouter et de mettre en œuvre la ITextTemplatingSessionHost à votre hôte personnalisé. Seulement la mise en œuvre de la ITextTemplatingEngineHost ne vous donnera pas une session de prise en charge.
OriginalL'auteur Daniel Pamich
À l'aide de Modèles de T4 pour le Moment de l'Exécution de la Génération
Vous choisissez cette méthode si vous avez besoin de générer du code au moment de l'exécution. Par exemple, vous voulez générer une Page de l'Objet à l'aide de Sélénium.
Créer un dossier dans votre solution, le nom des Modèles (bon nom pour
Les Modèles De T4).
Ensuite ajoutez un nouvel Élément de type T4, choisissez ensuite l'
Exécution Du Modèle De Texte.... Nous avons nommé notre modèle MyNodeName.tt ce qui est vu dans l'image ci-dessus.
Ajouter votre code comme indiqué ci-dessous, la partie supérieure a été inséré par Visual Studio...
Vous pouvez voir que nous voulons faire passer dans l'espace de Noms et le nom de la Classe (ce sont le Modèle.NameSpaceName et le Modèle.ClassName balisage vu ci-dessus.
La partie la plus délicate est d'apprendre à passer dans les paramètres...
Créer un nouveau CS de classe avec le nom partielle dans le nom de fichier.
Mais dans la classe n'a pas de nom, il MyNodeNamePartial nom il MyNodeName comme ceci:
C'est le même nom que le TT de fichier. (MyNodeName) qui crée sa propre classe partielle. Mais maintenant, remarquez, nous avons une valeur appelée MODÈLE de ce type de classe..
Le modèle classe contient le nom de la Classe et NameSpaceName et tout ce que vous voulez "injecter" dans le modèle.
La clé de ce travail comme le montre,
c'est que le moteur d'Exécution du Modèle de Texte a été utilisé! Si vous utilisez un Modèle de Texte, peu importe ce que vous faites, vous verrez des erreurs similaires à "Modèle introuvable" ou d'autres questions ambiguës.
De Débogage Conseils:
"Le Modèle ne peut pas être trouvé" est le T4 de génération de code de vous dire que dans votre classe partielle à la variable nommée MODÈLE, qu'il ne peut pas le trouver! Vérifiez à la fois votre partiels et les types de modèles pour s'assurer qu'ils sont dans le même espace de noms que toute autre classe normale de l'espace de noms seraient créés dans ce dossier.
OriginalL'auteur John Peters
Regarder Référence MSDN (Section "Passage de paramètres dans le constructeur").
Pour résumer:
Créer une classe partielle avec le même nom de votre TT Fichier.
Alors passez vos paramètres dans le constructeur de la classe
OriginalL'auteur alexbchr
Pensé à elle. Pour ceux qui sont intéressés de voir les suivants:
http://www.olegsych.com/2009/09/t4-preprocessed-text-templates/
OriginalL'auteur dezrtluver