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