다음을 통해 공유


T4 텍스트 템플릿 유틸리티 메서드

Visual Studio 텍스트 템플릿에서 코드를 작성할 때 항상 사용할 수 있는 몇 가지 메서드가 있습니다. 이러한 메서드는 TextTransformation에서 정의됩니다.

전처리된 텍스트 템플릿이 아닌 일반 텍스트 템플릿에서 호스트 환경에 의해 제공되는 다른 메서드 및 서비스를 사용할 수도 있습니다. 예를 들어 Visual Studio 및 로드된 패키지에서 제공되는 서비스를 가져오고 파일 경로를 확인하고 오류를 기록할 수 있습니다. 자세한 내용은 T4 텍스트 템플릿에서 Visual Studio 또는 다른 호스트 액세스를 참조하십시오.

쓰기 메서드

식 코드 블록을 사용하는 대신 Write() 및 WriteLine() 메서드를 사용하여 표준 코드 블록 안에 텍스트를 추가할 수 있습니다. 다음 두 코드 블록은 기능면에서 동일합니다.

식 블록이 포함된 코드 블록

<#
int i = 10;
while (i-- > 0)
    { #>
        <#= i #>
    <# }
#>

WriteLine()을 사용하는 코드 블록

<# 
    int i = 10;
    while (i-- > 0)
    { 
        WriteLine((i.ToString()));
    }
#>

중첩 제어 구조에서 긴 코드 블록 안에 식 블록 대신 이러한 유틸리티 메서드 중 하나를 사용하는 것이 유용할 수 있습니다.

Write() 및 WriteLine() 메서드에는 두 오버로드가 있습니다. 한 오버로드는 단일 문자열 매개 변수를 사용하고 다른 오버로드는 합성 형식 문자열과 이 문자열에 포함할 개체의 배열을 사용합니다(Console.WriteLine() 메서드와 유사함). WriteLine()을 사용하는 다음 두 경우는 기능면에서 동일합니다.

<#
    string msg = "Say: {0}, {1}, {2}";
    string s1 = "hello";
    string s2 = "goodbye";
    string s3 = "farewell";
    
    WriteLine(msg, s1, s2, s3);
    WriteLine("Say: hello, goodbye, farewell");
#> 

들여쓰기 메서드

들여쓰기 메서드를 사용하여 텍스트 템플릿의 출력 형식을 지정할 수 있습니다. TextTransformation 클래스에는 텍스트 템플릿에서 현재 들여쓰기를 보여 주는 CurrentIndent 문자열 속성과 추가된 들여쓰기의 목록인 indentLengths 필드가 있습니다. PushIndent() 메서드를 사용하여 들여쓰기를 추가하고 PopIndent() 메서드를 사용하여 들여쓰기를 뺄 수 있습니다. 모든 들여쓰기를 제거하려면 ClearIndent() 메서드를 사용합니다. 다음 코드 블록에서는 이러한 메서드의 사용 방법을 보여 줍니다.

<#
    WriteLine(CurrentIndent + "Hello");
    PushIndent("    ");
    WriteLine(CurrentIndent + "Hello");
    PushIndent("    ");
    WriteLine(CurrentIndent + "Hello");
    ClearIndent();
    WriteLine(CurrentIndent + "Hello");
    PushIndent("    ");
    WriteLine(CurrentIndent + "Hello");
#>

이 코드 블록은 다음과 같이 출력됩니다.

Hello
        Hello
                Hello
Hello
        Hello

오류 및 경고 메서드

오류 및 경고 유틸리티 메서드를 사용하여 Visual Studio 오류 목록에 메시지를 추가할 수 있습니다. 예를 들어, 다음 코드에서는 오류 메시지를 오류 목록에 추가합니다.

<#
  try
  {
    string str = null;
    Write(str.Length.ToString());
  }
  catch (Exception e)
  {
    Error(e.Message);
  }
#>  

호스트 및 서비스 공급자 액세스

this.Host 속성을 사용하여 템플릿을 실행하는 호스트에서 노출하는 속성에 액세스할 수 있습니다. this.Host를 사용하려면 <@template#> 지시문에서 hostspecific 특성을 설정해야 합니다.

<#@template ... hostspecific="true" #>

this.Host의 형식은 템플릿이 실행되는 호스트의 형식에 따라 달라집니다. Visual Studio에서 실행되는 템플릿에서 this.Host를 IServiceProvider로 캐스팅하여 IDE와 같은 서비스에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider) this.Host)
                       .GetService(typeof(EnvDTE.DTE));

여러 유틸리티 메서드 집합 사용

텍스트 생성 프로세스의 일부로, 템플릿 파일이 클래스로 변환됩니다. 이 클래스는 항상 GeneratedTextTransformation으로 명명되며 TextTransformation에서 상속합니다. 다른 메서드 집합을 대신 사용하려면 사용자 고유의 클래스를 작성하고 템플릿 지시문에서 지정할 수 있습니다. 이 클래스는 TextTransformation에서 상속해야 합니다.

<#@ template inherits="MyUtilityClass" #>

assembly 지시문을 사용하여 컴파일된 클래스를 찾을 수 있는 어셈블리를 참조할 수 있습니다.