Запуск шаблона T4 с помощью C#

У меня есть шаблон T4 (mycode.tt), который создает файл cs. Обычно я щелкаю правой кнопкой мыши файл tt и выбираю RunCustomTool, который внутренне принимает файл xml и генерирует для меня код. Теперь я хочу запустить пользовательский инструмент с помощью приложения Windows С#. Итак, одним нажатием кнопки я хочу запустить пользовательский инструмент. Можно ли запустить CustomTool из С#.

Редактировать:

У меня есть 2 файла tt, и в одном из них нет файла кода программной части cs. Но к другому прикреплен файл .cs, и я вызываю метод TransformText() второго файла из первого файла .tt. Поэтому мне нужно вызвать первый файл. Поэтому я не могу использовать метод TransformText(). Есть ли способ динамически вызывать файл textTemplate?


person Novice    schedule 24.01.2011    source источник


Ответы (2)


Я бы рекомендовал предварительно обработанный маршрут, как ответил @jb_ выше.

В качестве альтернативы, если вам нужно, чтобы ваши шаблоны по-прежнему редактировались без шага компиляции для использования с вашим пользовательским приложением C#, и приложение будет развернуто только на компьютерах вместе с Visual Studio, вы можете написать собственный узел.

http://msdn.microsoft.com/en-us/library/bb126519.aspx

person GarethJ    schedule 25.01.2011

Вы можете легко добиться этого, используя 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());
        }
    }
}
person jb_    schedule 24.01.2011
comment
Для существующего шаблона вы можете изменить пользовательский инструмент в свойствах с TextTemplatingFileGenerator на TextTemplatingFilePreprocessor. - person Daniel Ballinger; 19.08.2011
comment
Как вы предоставляете параметры? - person Georg; 31.01.2018