Многие кто сталкивался с DSL Tools и ASP.Net MVC уже знакомы с системой генерации T4 (Text Template Transformation Toolkit), которая в данный момент уже встроена в Visual Studio 2008.
Начнём сразу с примера.
Пример
Открываем студию, создаём проект консольного приложения. Затем создаём файл с именем "MyGenerator.tt"
Примечание: Обращаем внимание на расширение *.tt - это стандартное расширение файлов для T4. Однако, шаблон этого типа файлов отсутствует в стандартном диалоге добавления новых элементов (Add New Item ...), но, наверняка, будет добавлен в новой версии.
После создания можно будет увидеть, что студия файл опознала: появилась иконка в виде текстового документа со стрелочкой (видимо, такая метафора транформации на лету), а также появился вложенный узел с пустым файлом "MyGenerator.cs" - в этом файле по умолчанию будет находится результат генерации.
Если заглянуть в свойства нового файла то можно увидеть такую ситуацию:
![](http://lh3.ggpht.com/_cqKDpMpIE24/SYRTgg1IaAI/AAAAAAAAADo/oCVhH_HkLDI/%5BUNSET%5D.png?imgmax=800)
С расширением *.tt автоматически связался Custom Tool под названием TextTemplatingFileGenerator.
Примечание: Тем кто занимался созданием своих Custom Tools для студии, известно что автоматическое связывание определённого расширения файлов с некоторым Custom Tool делается через реестр. В данном случае можно изучить содержимое [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{164B10B9-B200-11D0-8C61-00A0C91E29D5}\.tt] и [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\.tt].
Напишем небольшой кусочек кода в этом файле:
<#@ template language="C#" hostspecific="true" #>
// Этот файл был сгенерирован.
// Генератор: <#= Host.GetType() #>
// Время генерации: <#= DateTime.Now #>
После сохранения файла, в итоговом файле "MyGenerator.cs":
// Этот файл был сгенерирован.
// Генератор: Microsoft.VisualStudio.TextTemplating.VSHost.TextTemplatingService
// Время генерации: 02/01/2009 00:12:25
Вот и получился минимальный простой генератор кода, который, правда, не делает никакой полезной работы. Как можно заметить, шаблоны T4 пишутся на неком подобии ASP.Net, только используется иной тип скобок, вместо <% %> вставляем <# #>.
Ссылки по теме