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