Запуск шаблонов T4 из другого шаблона T4 - PullRequest
7 голосов
/ 03 сентября 2010

Кто-нибудь знает, возможно ли запустить файл шаблона T4 из другого шаблона T4, внутри VS2010

Спасибо

Ответы [ 4 ]

6 голосов
/ 03 сентября 2010

Да, вы можете. Вот как я это делаю:

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); 
2 голосов
/ 03 января 2013

То, что вы, вероятно, ищете, это http://t4toolbox.codeplex.com/ t4 Toolbox.Это позволит вам фактически генерировать код в отдельных файлах и автоматически добавлять их в проект.

Настоятельно рекомендуется.

Я использовал набор инструментов t4 для генерации целых проектов только на основе модели.

1 голос
/ 12 ноября 2010

Мы делаем это много.Вот пример того, как мы повторно используем общий шаблон T4, но при этом «передаем параметры» в него:

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

И мы сохраняем наш шаблон T4 «универсальным», динамически определяя местоположение, в котором шаблон T4 фактически запущен(в данном случае шаблон T4, в котором есть строка include):

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

Это позволяет нам создавать очень мощные шаблоны без необходимости дублировать наши шаблоны.Единственное, что «дублируется», - это наши 4-строчные .tt файлы, в которых есть вызов include, но они в значительной степени не требуют обслуживания, за исключением той «конфигурации», которую мы хотим выполнить, передав переменные так, как мысделай это.

1 голос
/ 03 сентября 2010

Есть несколько оптонов с различными компромиссами:

http://www.olegsych.com/2008/04/t4-template-design/

...