qualcuno sa se è possibile eseguire file di modello T4 da un altro modello T4, all'interno VS2010Esecuzione modelli T4 da altro modello T4
Grazie
qualcuno sa se è possibile eseguire file di modello T4 da un altro modello T4, all'interno VS2010Esecuzione modelli T4 da altro modello T4
Grazie
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);
Ci sono molteplici optons con differenti trade-off:
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.
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.
fa affidamento su T4 Toolbox? – Maslow
@Maslow no, non c'è bisogno di terze parti per farlo funzionare ... – veljkoz
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