2010-08-22 3 views
2

J'ai écrit un modèle simple T4 (appeler « web.tt) pour générer un fichier web.config est ici l'essentiel de celui-ci.modèle T4 accès programme

<#@ template debug="true" language="C#" hostSpecific="true" #> 
<#@ output extension=".config" #> 
<?xml version="1.0" encoding="UTF-8"?> 

<configuration> 
    <!-- yadda yadda yadda --> 
</configuration> 

Puis-je accéder à ce modèle par programmation ? d'une classe Boîte à outils T4 Générateur je besoin de quelque chose comme:

<#@ include file="web.tt" #> 
<#+ 
// <copyright file="Generator1.tt" company="Microsoft"> 
// Copyright © Microsoft. All Rights Reserved. 
// </copyright> 

public class Generator1 : Generator 
{ 
    protected override void RunCore() 
    { 
     string[] environmentNames = new string[] { "env1", "env2", "env3" }; 
     foreach (string environmentName in environmentNames) 
     { 
      Template webTemplate = // programmatically fetch template in defined in web.tt above. 
      webTemplate.EnvironmentName = environmentName; 
      webTemplate.RenderToFile(environmentName); 
     } 
    } 
} 
#> 

pouvez-vous me diriger dans la bonne direction :)

Répondre

1

L'article suivant montre comment faire exactement cela pour une procédure stockée T-SQL.

http://www.olegsych.com/2008/09/t4-tutorial-creating-reusable-code-generation-templates/

En d'autres termes, vous définissez une classe de modèle dans votre web.tt et de créer une nouvelle instance de celui-ci dans le RunCore de votre générateur.

Hope this helps,

Oleg

+0

Salut Oleg. J'ai déjà lu votre article de blog et beaucoup d'autres que vous avez écrits sur T4. Tu es l'homme! La seule approche consiste donc à incorporer le contenu de mon modèle dans la méthode TransformText() d'une classe dérivée de Template? – urig

1

modèles ont la méthode TransformText() que vous pouvez appeler à programatical? Générez votre fichier.

Template webTemplate = // programmatically fetch template in defined in web.tt above. 
webTemplate.EnvironmentName = environmentName; 
string output = webTemplate.TransformText(); 
+0

Je trouve que la redéfinition de mon modèle en tant que classe TransformText et dominante() pour contenir le contenu complet de mon modèle est un peu encombrant. N'y a-t-il pas un moyen pour que je puisse écrire un modèle «simple» et y accéder par nom ou par type à partir d'un autre modèle? – urig

Questions connexes