텍스트 템플릿 변환 프로세스
텍스트 템플릿 변환 프로세스는 텍스트 템플릿 파일을 입력으로 사용하고 새 텍스트 파일을 출력으로 생성합니다. 예를 들어 텍스트 템플릿을 사용하여 Visual Basic 또는 C# 코드를 생성하거나 HTML 보고서를 생성할 수 있습니다.
이 프로세스에는 엔진, 호스트, 지시문 프로세서의 세 가지 구성 요소가 참여합니다. 엔진은 프로세스를 제어하고, 호스트 및 지시문 프로세서와 상호 작용하여 출력 파일을 생성합니다. 호스트는 파일 및 어셈블리 찾기와 같은 환경과의 상호 작용을 제공합니다. 지시문 프로세서는 XML 파일 또는 데이터베이스에서 데이터 읽기와 같은 기능을 추가합니다.
텍스트 템플릿 변환 프로세스는 두 단계로 수행됩니다. 먼저 엔진이 생성된 변환 클래스라고 하는 임시 클래스를 만듭니다. 이 클래스에는 지시문 및 제어 블록에 의해 생성되는 코드가 포함되어 있습니다. 그런 다음 엔진은 생성된 변환 클래스를 컴파일하고 실행하여 출력 파일을 생성합니다.
구성 요소
구성 요소 | 설명 | 사용자 지정 가능(예/아니요) |
---|---|---|
엔진 | 엔진 구성 요소는 텍스트 템플릿 변환 프로세스를 제어합니다. | 아니요. |
Host | 호스트는 엔진과 사용자 환경 간의 인터페이스입니다. Visual Studio는 텍스트 변환 프로세스의 호스트입니다. | 예. 사용자 지정 호스트를 작성할 수 있습니다. |
지시문 프로세서 | 지시문 프로세서는 텍스트 템플릿에서 지시문을 처리하는 클래스입니다. 지시문을 사용하여 입력 소스에서 텍스트 템플릿에 데이터를 제공할 수 있습니다. | 예. 사용자 지정 지시문 프로세서를 작성할 수 있습니다. |
엔진
엔진은 변환 프로세스에 사용되는 모든 파일을 처리하는 호스트에서 문자열로 템플릿을 받습니다. 그런 다음 엔진은 호스트에 사용자 지정 지시문 프로세서 및 환경의 다른 측면을 찾도록 요청합니다. 엔진은 그런 다음 생성된 변환 클래스를 컴파일하고 실행합니다. 엔진은 생성된 텍스트를 호스트에 반환하고 호스트는 일반적으로 텍스트를 파일에 저장합니다.
호스트
호스트는 다음을 포함하여 변환 프로세스 외부 환경과 관련된 모든 작업을 담당합니다.
엔진 또는 지시문 프로세서에서 요청하는 텍스트 및 이진 파일 찾기. 호스트는 디렉터리와 전역 어셈블리 캐시를 검색하여 어셈블리를 찾을 수 있습니다. 호스트는 엔진의 사용자 지정 지시문 프로세서 코드를 찾을 수 있습니다. 호스트는 텍스트 파일을 찾아서 읽고 해당 내용을 문자열로 반환할 수도 있습니다.
생성된 변환 클래스를 만들기 위해 엔진이 사용하는 표준 어셈블리와 네임스페이스의 목록을 제공.
엔진이 생성된 변환 클래스를 컴파일하고 실행할 때 사용되는 애플리케이션 도메인 제공. 템플릿 코드의 오류로부터 호스트 애플리케이션을 보호하기 위해 별도의 애플리케이션 도메인이 사용됩니다.
생성된 출력 파일 쓰기.
생성된 출력 파일의 기본 확장명 설정.
텍스트 템플릿 변환 오류 처리. 예를 들어 호스트는 사용자 인터페이스의 오류를 표시하거나 파일에 쓸 수 있습니다. (Visual Studio에서는 오류 메시지 창에 오류가 표시됩니다.)
사용자가 값을 제공하지 않고 지시문을 호출한 경우 필요한 매개 변수 값 제공. 지시문 프로세서는 지시문의 이름과 매개 변수를 지정하고 호스트에 기본값(있는 경우) 제공을 요청할 수 있습니다.
지시문 및 지시문 프로세서
지시문은 텍스트 템플릿에 있는 명령입니다. 지시문은 생성 프로세스에 매개 변수를 제공합니다. 일반적으로 지시문은 모델 또는 다른 입력의 원본 및 유형과 출력 파일의 파일 이름 확장명을 정의합니다.
지시문 프로세서는 하나 이상의 지시문을 처리할 수 있습니다. 템플릿을 변환할 때는 템플릿의 지시문을 처리할 수 있는 지시문 프로세서가 설치되어 있어야 합니다.
지시문은 생성된 변환 클래스에 코드를 추가하여 작동합니다. 텍스트 템플릿에서 지시문을 호출하면 엔진은 생성된 변환 클래스를 만들 때 모든 지시문 호출을 처리합니다. 지시문을 성공적으로 호출하면 텍스트 템플릿에 작성하는 코드의 나머지 부분은 지시문이 제공하는 기능을 사용할 수 있습니다. 예를 들어 템플릿에서 import
지시문에 대해 다음과 같은 호출을 수행할 수 있습니다.
<#@ import namespace="System.Text" #>
표준 지시문 프로세서는 이를 생성된 변환 클래스의 using
문으로 변환합니다. 그런 다음 System.Text.StringBuilder
로 정규화하지 않고 템플릿 코드의 나머지 부분에서 StringBuilder
클래스를 사용할 수 있습니다.