Запуск шаблонов T4 из другого шаблона T4

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

Благодарить


person muek    schedule 03.09.2010    source источник


Ответы (4)


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

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); 
person veljkoz    schedule 03.09.2010
comment
это зависит от T4 Toolbox? - person Maslow; 15.04.2014
comment
Для дальнейшего использования: добавьте ссылку на Microsoft.VisualStudio.TextTemplating.Interfaces.11.0 и добавьте ‹#@ имя сборки=Microsoft.VisualStudio.TextTemplating.Interfaces.11.0 #› и ‹#@ import namespace=Microsoft.VisualStudio.TextTemplating #› в файл Т4. - person LosManos; 18.10.2015

Вероятно, вы ищете T4 Toolbox. Это позволит вам фактически генерировать код в отдельных файлах и автоматически добавлять их в проект.

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

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

(Панель инструментов T4 ранее находилась по адресу http://t4toolbox.codeplex.com/, но теперь находится по адресу https://github.com/olegsych/T4Toolbox )

person Chris Lucian    schedule 02.01.2013

Мы делаем это много. Вот пример того, как мы повторно используем общий шаблон 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, но они в значительной степени не требуют обслуживания, за исключением любой «конфигурации», которую мы хотим выполнить, передавая переменные так, как мы это делаем.

person Jaxidian    schedule 12.11.2010

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

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

person Oleg Sych    schedule 03.09.2010
comment
Ссылка не работает. Описание в ответе было бы лучше, - person StayOnTarget; 07.05.2018