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


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

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

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

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

Компоненты

Компонент

Описание

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

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

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

Нет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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