다음을 통해 공유


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

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

또한 호스트 환경에서 일반(전처리 되지 않은) 텍스트 템플릿이 제공하는 다른 메서드 및 서비스를 사용할 수 있습니다. 예를 들어 파일 경로를 확인하고, 오류를 기록하고, Visual Studio 및 로드된 패키지에서 제공하는 서비스를 가져올 수 있습니다. 자세한 내용은 텍스트 템플릿에서 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.HostIServiceProvider로 캐스팅하여 IDE 같은 서비스에 대한 액세스 권한을 얻을 수 있습니다. 예시:

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

다른 유틸리티 메서드 집합 사용

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

<#@ template inherits="MyUtilityClass" #>

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