04 February 2009

T4 (Visual Studio Text Templates) - Початок

Ненавиджу писати вступні пости, але за роки в мене забралось вже багато інфи про T4, і мені потрібно її якось увіковічити… А для цього потрібен фундамент. Окрім вас мене ніхто читати не буде, тож терпіть…

Text Templates, або просто T4 – це вбудований в Visual Studio 2008 (в 2005 треба окремо встановлювати) двигун для генерування тексту. Виглядає дуже схоже на Asp.NET сторінки. Приблизно так само і працює. Для того щоб розпочати роботу потрібно додати файл з розширенням tt (наразі, можна скористатися вже готовим темплейтом в студію). Туди вписати щось на кшталт:

   1: <#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" language="C#v3.5" hostspecific="true" #>
   2: <#@ assembly Name="System.Core.dll" #>
   3: <#@ output extension=".cs" #>
   4: class Test
   5: {
   6:     public void DoSomething()
   7:     {
   8:         System.Console.WriteLine("Generated at {0}", "<#= DateTime.Now.ToString() #>");
   9:     }
  10: }

Директива template, це щось на кшталт Page а ASP.NET. Там можна вказати базовий клас, мову, тощо. З іншими директивами можна ознайомитись тут.

Код після директиви output, це і є темплейт, а наприклад конструкція <#= DateTime.Now.ToString() #> вставить поточну дату в результуючий файл.

В результаті повинно вийти щось на кшталт:

   1: class Test
   2: {
   3:     public void DoSomething()
   4:     {
   5:         System.Console.WriteLine("Generated at {0}", "01.02.2009 0:59:35");
   6:     }
   7: }

Інший приклад генерування за допомогою контролюючих структур:

   1: <#
   2: foreach (var currentChar in new []{"A","B","C"})
   3: {
   4: #>
   5:     Console.WriteLine("<#= currentChar #>");
   6: <#
   7: }
   8: #>

Так саме як і Page, темплейт генерує код в темп фолдері, а потім його вже компілює. Так само як і з ASP.NET цим можна користатися наприклад для того щоб продивитись результуючий код.

Схоже все.. Тепер це все можна використовувати. Наприклад зараз в мене T4 будує:

  • Солюшени для SharePoint (маніфест, каб-дефінішен, фітчер)
  • Купу однотипного коду (константи, синтаксичний цукор)
  • DAL (Маппери з IRecord в об’єкти, фасади)
  • Веб-сервіси (Конфігурацію, Контракти)
  • Базу даних (SQL таблиць та в’юх)

Ресурси

Generating Artifacts By Using Text Templates – початкова сторінка на MSDN.

Oleg Sych – блог де є що почитати про T4… Наприклад Pros and Cons of T4 in Visual Studio 2008.

Категорія T4 на Patterns and Practices Guidance, теж є що подивитись, особливо на приклади реального використання.

T4 Templates in ASP.NET MVC – в інтеграція MVC Framework та студії використовує T4 для генерації коду.

Темплейт в Visual Studio 2008 – простий шаблон.


Далі буде! Веселих вам темплейтів!

Помічено як:
 

Коментарі

# Vitalii Symon said:

зараз дійшов до компіляції t4 -> c# на льоту. все класно, але поки хочеться просто розбити собі голову

07 January 10 at 2:02 PM
# Mike Chaliy said:

Ти про що?

08 January 10 at 1:30 AM
# rimonabantexcellence site title said:

Пінгбек від http://www.rimonabantexcellence.com/t.php?aHR0cDovL2Rldi5uZXQudWEvYmxvZ3MvbWlrZWNoYWxpeS9hcmNoaXZlLzIwMDkvMDIvMDQvNzY1NC5hc3B4

29 May 13 at 7:22 PM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Цікавлюсь DDD. Більшість часу витрачаю на доньку. А ще вел!