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 – простий шаблон.
Далі буде! Веселих вам темплейтів!
Цікавлюсь DDD. Більшість часу витрачаю на доньку. А ще вел!