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