Запуск шаблона T4 с использованием С#
У меня есть шаблон T4 (mycode.tt), который создает файл cs. Обычно я щелкаю правой кнопкой мыши по файлу tt и выбираю RunCustomTool, который внутренне принимает xml файл и генерирует код для меня. Теперь я хочу запустить пользовательский инструмент, используя приложение windows С#. Поэтому при нажатии кнопки я хочу запустить Custom Tool. Можно ли запустить CustomTool с С#.
Edit:
У меня есть 2 файла tt, и у одного из них нет файла codebehind cs. Но у другого есть файл .cs, связанный с ним, и я вызываю второй метод TransformText() из первого файла .tt. Поэтому мне нужно вызвать первый файл. Так что я не могу использовать метод TransformText(). Есть ли способ динамически вызвать файл textTemplate?
Ответы
Ответ 1
Я бы рекомендовал предварительно обработанный маршрут, как было сказано выше, @jb_.
В качестве альтернативы, если вам нужно, чтобы ваши шаблоны все еще редактировались без шага компиляции для использования с вашим пользовательским приложением С#, и приложение будет развернуто только на машинах вместе с Visual Studio, вы можете написать собственный хост.
http://msdn.microsoft.com/en-us/library/bb126519.aspx
Ответ 2
Вы можете легко достичь этого, когда используете VS2010. Если вы добавите новый проект в проект, выберите файл с предварительно обработанным текстовым шаблоном. Вы можете отредактировать шаблон как обычно. Вместо того, чтобы генерировать результат напрямую, файл генерирует код, который генерируется нормально. Я знаю, это звучит странно. Но то, что вы видите в своем выходном файле, - это код, созданный набором инструментария для шаблонов текста, чтобы получить ваш результат (более или менее).
Это короткий пример предварительно обработанного текстового шаблона с именем "TestTemplate.tt" и как его использовать в коде:
tt файл:
<#@ template language="C#" #>
Some output.
код:
using System;
using System.Diagnostics;
namespace Test
{
class Program
{
static void Main(string[] args)
{
TestTemplate testTemplate = new TestTemplate();
Debug.Print(testTemplate.TransformText());
}
}
}