2010-08-07 5 views
2

Je viens de commencer à jouer avec T4, car je veux finalement l'utiliser pour générer des POCO qui correspondent aux classes d'entités LINQ to SQL, mais même l'exemple le plus simple m'a un peu confus. Des conseils sur ce qui se passe et des conseils sur une bonne lecture seraient grandement appréciés.Trouble understanding T4

Je suis d'accord que le modèle suivant devrait produire un fichier contenant seulement le texte Hello World!, mais à la place il produit une classe qui affiche le texte Hello World! Comment puis-je obtenir mon simple et simple Hello Worldseul fichier?

Le modèle:

<#@ template language="C#"#> 
<#@ output extension=".cs" #> 
class HelloWorld 
{ 

} 

La sortie:

#line 1 "C:\Development\PocoGenerator\PocoGenerator\HelloWorld.tt" 
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "10.0.0.0")] 
public partial class HelloWorld : HelloWorldBase 
{ 
    public virtual string TransformText() 
    { 
     this.GenerationEnvironment = null; 
     this.Write("class HelloWorld\r\n{\r\n\r\n}\r\n\r\n"); 
     return this.GenerationEnvironment.ToString(); 
    } 
} 

#line default 
#line hidden 

Il est suivi par une classe HelloWorldBase relativement complexe dans le même fichier de sortie. Il me semble que c'est une classe intermédiaire qui est censée être utilisée pour générer la réalisation de modèle prévue, mais qu'est-ce qui est censé arriver pour que cela se produise?

Répondre

3

ProfK,

Vous regardez les résultats produits par un preprocessed template. Si vous choisissez un "Modèle de texte" standard dans la boîte de dialogue nouvel élément de projet de Visual Studio, vous verrez les résultats complets de la transformation.

Oleg

+1

Vous monsieur, êtes une star! – ProfK

1

jamais vu ... La sortie dans votre cas devrait simplement:

class HelloWorld 
{ 
} 

Juste testé, et c'est ce qu'il produit ici ...

Quel est l'outil personnalisé pour votre fichier .tt? Vous pouvez le vérifier en cliquant avec le bouton droit sur le fichier dans l'explorateur de solution et en sélectionnant "Propriétés". Ce devrait être 'TextTemplatingFileGenerator'.

Dans T4, tout compris entre <# et #> est interprété comme code (C# dans ce cas). Semblable à <%= ou <%: d'ASP.Net, vous pouvez également utiliser '<#=' pour convertir automatiquement une instruction en chaîne. Ainsi, afin de simplement la sortie 'Bonjour tout le monde', vous pouvez utiliser soit un texte littéral:

<#@ template language="C#"#> 
<#@ output extension=".cs" #> 
Hello World 

ou utilisez ceci:

<#@ template language="C#"#> 
<#@ output extension=".cs" #> 
<#= "Hello World" #> 

ou même une autre façon:

<#@ template language="C#"#> 
<#@ output extension=".cs" #> 
<# var text = "Hello World"; #> 
<#= text #> 

Maintenant, plus fondamentalement

  • il y a déjà plusieurs T4 imp Lementations pour L2S, peut-être vous devriez jeter un oeil à ceux (google recherche sur 'linq to sql poco T4' révèle déjà plusieurs liens). Par exemple. http://blog.tonysneed.com/2009/01/16/t4-poco-templates-for-l2s-and-ef/
  • Vous pouvez également envisager d'utiliser Entity Framework au lieu de L2S. Il y a un modèle de POCO disponible hors de la boîte.
+0

Merci. Pour une raison quelconque, l'outil personnalisé était 'TextTemplatingFilePreprocessor'. Je suis passé à -Generator et tout fonctionne comme prévu. – ProfK