Запустите текстовый шаблон T4 программно - PullRequest
7 голосов
/ 04 декабря 2009

Есть ли способ программно запускать текстовые шаблоны 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-документе. Это может показаться не таким уж большим делом, но это заставляет систему контроля версий проверять все сгенерированные файлы, и если у вас много документов, преобразование может на самом деле занять довольно много времени. Спасибо за любую помощь.

1 Ответ

6 голосов
/ 04 декабря 2009

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

...