кто-нибудь знает, можно ли запустить файл шаблона T4 из другого шаблона T4 внутри VS2010
Благодарить
кто-нибудь знает, можно ли запустить файл шаблона T4 из другого шаблона T4 внутри VS2010
Благодарить
Да, ты можешь. Вот как я это делаю:
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);
Вероятно, вы ищете T4 Toolbox. Это позволит вам фактически генерировать код в отдельных файлах и автоматически добавлять их в проект.
Настоятельно рекомендуется.
Я использовал набор инструментов t4 для создания целых проектов только на основе модели.
(Панель инструментов T4 ранее находилась по адресу http://t4toolbox.codeplex.com/, но теперь находится по адресу https://github.com/olegsych/T4Toolbox )
Мы делаем это много. Вот пример того, как мы повторно используем общий шаблон 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
, но они в значительной степени не требуют обслуживания, за исключением любой «конфигурации», которую мы хотим выполнить, передавая переменные так, как мы это делаем.
Есть несколько вариантов с различными компромиссами:
http://www.olegsych.com/2008/04/t4-template-design/