텍스트 템플릿 유틸리티 메서드
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.Host
를 IServiceProvider
로 캐스팅하여 IDE 같은 서비스에 대한 액세스 권한을 얻을 수 있습니다. 예시:
EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider) this.Host)
.GetService(typeof(EnvDTE.DTE));
다른 유틸리티 메서드 집합 사용
텍스트 생성 프로세스의 일부로 템플릿 파일은 항상 이름이 지정 GeneratedTextTransformation
되고 상속되는 클래스로 변환됩니다 TextTransformation. 대신 다른 메서드 집합을 사용하려는 경우 고유한 클래스를 작성하고 템플릿 지시문에서 지정할 수 있습니다. 클래스는 TextTransformation에서 상속해야 합니다.
<#@ template inherits="MyUtilityClass" #>
assembly
지시문을 사용하여 컴파일된 클래스를 찾을 수 있는 어셈블리를 참조합니다.