Поделиться через


Процесс преобразования текстового шаблона

Процесс преобразования текстового шаблона принимает файл текстового шаблона на входе и генерирует новый текстовый файл на выходе. Например, можно использовать текстовые шаблоны для генерирования кода на языке Visual Basic или C# или сгенерировать HTML-отчет.

Три компонента принимают участие в этом процессе: процессор шаблонов, основное приложение и процессоры директив. Процессор шаблонов управляет всем процессом; он взаимодействует с основным приложением и процессором директив для создания выходного файла. Основное приложение обеспечивает среду взаимодействия, в частности ищет файлы и сборки. Процессор директив добавляет такую функциональность, как чтение данных из XML-файла или базы данных.

Процесс преобразования текстового шаблона протекает в два этапа. Первым делом процессор шаблонов создает временный класс, который называется сгенерированным классом преобразования. Этот класс содержит код, сгенерированный на основе директив и управляющих блоков. После этого процессор шаблонов компилирует и выполняет сгенерированный класс преобразования для создания выходного файла.

Компоненты

Компонент

Описание

Настраиваемый (Да/Нет)

Процессор шаблонов

Компонент процессора шаблонов управляет процессом преобразования текстового шаблона

Нет.

Основное приложение

Основное приложение служит интерфейсом между процессором шаблонов и пользовательской средой. Visual Studio является основным приложением процесса преобразования текста.

Да. Можно написать пользовательское основное приложение.

Процессор директив

Процессоры директив – это классы, которые обрабатывают содержащиеся в текстовых шаблонах директивы. Директивы можно использовать для представления для текстового шаблона данных из внешнего источника.

Да. Можно написать пользовательские процессоры директив

Процессор шаблонов

Процессор шаблонов получает шаблон в виде строки от основного приложения, которое оперирует всеми файлами, используемыми в процессе преобразования. Затем процессор шаблонов просит основное приложение найти пользовательские процессоры директив и другие элементы среды. Далее процессор шаблонов компилирует и выполняет сгенерированный класс преобразования. Процессор шаблонов возвращает сгенерированный текст основному приложению, которое обычно сохраняет этот текст в файле.

Основное приложение

Основное приложение ответственно за все, что связано со средой процесса преобразования, включая выполнение следующих операций.

  • Загрузка текста и двоичных файлов, запрошенных процессором шаблонов или процессором директив. Основное приложение может просматривать каталоги и глобальный кэш сборок в поиске сборок. Основное приложение может найти для процессора шаблонов код пользовательского процессора директив. Также основное приложение может найти и прочитать текстовые файлы и вернуть их содержимое в виде строк.

  • Предоставление списка стандартных сборок и пространств имен, используемых процессором шаблонов для создания сгенерированного класса преобразования.

  • Предоставление домена приложения, который используется, когда процессор шаблонов компилирует и выполняет сгенерированный класс преобразования. Используется отдельный домен приложения для защиты основного приложения от ошибок в коде шаблона.

  • Написание генерируемого выходного файла.

  • Установка расширения по умолчанию для генерируемого выходного файла.

  • Обработка ошибок преобразования текстового шаблона. Например, основное приложение может отображать сообщения об ошибках в пользовательском интерфейсе или записывать их в файл. (В Visual Studio ошибки отображаются в окне сообщений об ошибках.)

  • Предоставление необходимого значения параметра, если пользователь вызвал директиву, не задав значение. Процессор директив может задать имя директивы и параметр и направить основному приложению запрос на предоставление значения по умолчанию, если таковое имеется.

Директивы и процессоры директив

Директива – это команда в текстовом шаблоне. Она предоставляет параметры для процесса генерирования. Обычно директивы определяют источник и тип модели или другой ввод, а также расширение имени файла для выходного файла.

Процессор директив может обрабатывать одну директиву или более. Для преобразования шаблона необходим установленный процессор директив, который может обрабатывать содержащиеся в шаблоне директивы.

Действие директив заключается в добавлении кода в генерируемый класс преобразования. Директивы вызываются из текстового шаблона, а процессор шаблонов обрабатывает все вызовы директив, когда создает генерируемый класс преобразования. После успешного вызова директивы остальной код, записанный в текстовый шаблон, может использовать предоставленную директивой функциональность. Например, можно выполнить в шаблоне следующий вызов директивы import:

<#@ import namespace="System.Text" #>

Стандартный процессор директив преобразует его в инструкцию using в сгенерированном классе преобразования. Затем можно использовать класс StringBuilder в остальной части кода шаблона, не уточняя его имя как System.Text.StringBuilder.