Подтвердить что ты не робот

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

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

Edit:

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

4b9b3361

Ответ 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());
        }
    }
}