Процесс преобразования текстового шаблона
Процесс преобразования текстового шаблона принимает файл текстового шаблона на входе и генерирует новый текстовый файл на выходе. Например, можно использовать текстовые шаблоны для генерирования кода на языке Visual Basic или C# или сгенерировать HTML-отчет.
Три компонента принимают участие в этом процессе: процессор шаблонов, основное приложение и процессоры директив. Процессор шаблонов управляет всем процессом; он взаимодействует с основным приложением и процессором директив для создания выходного файла. Основное приложение обеспечивает среду взаимодействия, в частности ищет файлы и сборки. Процессор директив добавляет такую функциональность, как чтение данных из XML-файла или базы данных.
Процесс преобразования текстового шаблона протекает в два этапа. Первым делом процессор шаблонов создает временный класс, который называется сгенерированным классом преобразования. Этот класс содержит код, сгенерированный на основе директив и управляющих блоков. После этого процессор шаблонов компилирует и выполняет сгенерированный класс преобразования для создания выходного файла.
Компоненты
Компонент |
Описание |
Настраиваемый (Да/Нет) |
---|---|---|
Процессор шаблонов |
Компонент процессора шаблонов управляет процессом преобразования текстового шаблона |
Нет. |
Основное приложение |
Основное приложение служит интерфейсом между процессором шаблонов и пользовательской средой. Visual Studio является основным приложением процесса преобразования текста. |
Да. Можно написать пользовательское основное приложение. |
Процессор директив |
Процессоры директив – это классы, которые обрабатывают содержащиеся в текстовых шаблонах директивы. Директивы можно использовать для представления для текстового шаблона данных из внешнего источника. |
Да. Можно написать пользовательские процессоры директив |
Процессор шаблонов
Процессор шаблонов получает шаблон в виде строки от основного приложения, которое оперирует всеми файлами, используемыми в процессе преобразования. Затем процессор шаблонов просит основное приложение найти пользовательские процессоры директив и другие элементы среды. Далее процессор шаблонов компилирует и выполняет сгенерированный класс преобразования. Процессор шаблонов возвращает сгенерированный текст основному приложению, которое обычно сохраняет этот текст в файле.
Основное приложение
Основное приложение ответственно за все, что связано со средой процесса преобразования, включая выполнение следующих операций.
Загрузка текста и двоичных файлов, запрошенных процессором шаблонов или процессором директив. Основное приложение может просматривать каталоги и глобальный кэш сборок в поиске сборок. Основное приложение может найти для процессора шаблонов код пользовательского процессора директив. Также основное приложение может найти и прочитать текстовые файлы и вернуть их содержимое в виде строк.
Предоставление списка стандартных сборок и пространств имен, используемых процессором шаблонов для создания сгенерированного класса преобразования.
Предоставление домена приложения, который используется, когда процессор шаблонов компилирует и выполняет сгенерированный класс преобразования. Используется отдельный домен приложения для защиты основного приложения от ошибок в коде шаблона.
Написание генерируемого выходного файла.
Установка расширения по умолчанию для генерируемого выходного файла.
Обработка ошибок преобразования текстового шаблона. Например, основное приложение может отображать сообщения об ошибках в пользовательском интерфейсе или записывать их в файл. (В Visual Studio ошибки отображаются в окне сообщений об ошибках.)
Предоставление необходимого значения параметра, если пользователь вызвал директиву, не задав значение. Процессор директив может задать имя директивы и параметр и направить основному приложению запрос на предоставление значения по умолчанию, если таковое имеется.
Директивы и процессоры директив
Директива – это команда в текстовом шаблоне. Она предоставляет параметры для процесса генерирования. Обычно директивы определяют источник и тип модели или другой ввод, а также расширение имени файла для выходного файла.
Процессор директив может обрабатывать одну директиву или более. Для преобразования шаблона необходим установленный процессор директив, который может обрабатывать содержащиеся в шаблоне директивы.
Действие директив заключается в добавлении кода в генерируемый класс преобразования. Директивы вызываются из текстового шаблона, а процессор шаблонов обрабатывает все вызовы директив, когда создает генерируемый класс преобразования. После успешного вызова директивы остальной код, записанный в текстовый шаблон, может использовать предоставленную директивой функциональность. Например, можно выполнить в шаблоне следующий вызов директивы import:
<#@ import namespace="System.Text" #>
Стандартный процессор директив преобразует его в инструкцию using в сгенерированном классе преобразования. Затем можно использовать класс StringBuilder в остальной части кода шаблона, не уточняя его имя как System.Text.StringBuilder.