텍스트 템플릿 유틸리티 메서드
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
지시문을 사용하여 컴파일된 클래스를 찾을 수 있는 어셈블리를 참조합니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기