Программный запуск текстового шаблона T4

Есть ли способ программно запускать текстовые шаблоны T4 из кода? Я создаю собственный язык для конкретного домена, и я хотел бы, чтобы связанные текстовые шаблоны запускались каждый раз, когда пользователь сохраняет. В настоящее время это то, что я делаю в модели DSL:

protected override void OnDocumentSaved(EventArgs e)
{
    IVsCommandWindow commandWindow = (IVsCommandWindow)this.ServiceProvider.GetService(typeof(IVsCommandWindow));
    if (commandWindow != null)
    {
        commandWindow.ExecuteCommand("TextTransformation.TransformAllTemplates");
    }
    base.OnDocumentSaved(e);
}

Это работает, но имеет очень раздражающий побочный эффект. Если в проекте есть несколько DSL-документов, каждый со своим текстовым шаблоном, они будут все запущены, а не только те, на которые повлияли изменения в данном DSL-документе. Это может показаться не таким уж большим делом, но это заставляет систему управления версиями проверять все сгенерированные файлы, и если у вас много документов, преобразование может занять довольно много времени. Спасибо за любую помощь.


person Alex    schedule 04.12.2009    source источник


Ответы (1)


Жан-Марк Приер из группы DSL объясняет, как это сделать с помощью специального инструмента, в части 4 руководства. лаборатория инструментов DSL. Вы также можете сделать это непосредственно из модели DSL, используя Служба ITextTemplating. Подробнее о преобразовании шаблонов здесь.

person Oleg Sych    schedule 04.12.2009
comment
У меня нет времени попробовать это прямо сейчас, но, просматривая этот документ, он выглядит очень многообещающе, и как только я проверю, я отмечу ваш ответ как принятый, если он сработает. Казалось бы, пользовательский инструмент - это путь. - person Alex; 04.12.2009