Запуск шаблона T4 с использованием C#

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

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

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

2 ответа

Решение

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

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

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

Вы можете легко достичь этого, используя 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());
        }
    }
}
Другие вопросы по тегам