2010-09-03 14 views

risposta

7

Sì, è possibile. Questo è come lo sto facendo:

string templateText = File.ReadAllText(Host.ResolvePath(templateFileName)); 
Engine engine = new Engine(); 
string output = engine.ProcessTemplate(templateText, Host); 
//this is optional - record all output to your file of choice: 
File.WriteAllText(outputFilePath, output); 
+0

fa affidamento su T4 Toolbox? – Maslow

+0

@Maslow no, non c'è bisogno di terze parti per farlo funzionare ... – veljkoz

+1

Per riferimento futuro: aggiungere un riferimento a Microsoft.VisualStudio.TextTemplating.Interfaces.11.0 e aggiungere <# @ assembly name = "Microsoft.VisualStudio.TextTemplating. Interfaces.11.0 "#> e <# @ namespace =" Microsoft.VisualStudio.TextTemplating "#> nel file T4. – LosManos

1

Lo facciamo molto. Ecco un esempio di come riutilizziamo un modello T4 comune ma "parametri pass" in esso:

<# 
var currentUsername = "billclinton"; // this is for integration tests impersonating a user in our case 
#> 
<#@ include file="..\SomeTemplateThatIWantToReuseHere.tt" #> 

E continuiamo il nostro modello T4 "generico" determinando in modo dinamico la posizione che il modello T4 è in realtà correva a (in questo caso, il modello T4 che ha la linea di include in esso):

string namespaceName = code.VsNamespaceSuggestion(); 
var namespaceParts = namespaceName.Split('.'); 
var currentNamespaceLeg = namespaceParts.Last(); 

questo ci permette di fare alcune molto potente di template, senza la necessità di duplicare i nostri modelli. L'unica cosa che è "duplicata" sono i nostri file .tt a 4 righe che contengono la chiamata include, ma questi sono praticamente esenti da manutenzione eccetto la "configurazione" che vogliamo eseguire passando le variabili nel modo in cui lo facciamo.

2

Quello che probabilmente stai cercando è http://t4toolbox.codeplex.com/ t4 Toolbox. Ti consentirà di generare effettivamente codice in singoli file e di aggiungerli automaticamente a un progetto.

Altamente raccomandato.

Ho usato t4 toolbox per generare interi progetti basati solo su un modello.