다음을 통해 공유


T4 텍스트 템플릿에서 Visual Studio 또는 다른 호스트 액세스

업데이트: 2011년 3월

텍스트 템플릿에서는 템플릿을 실행하는 Visual Studio과 같은 호스트에서 노출하는 메서드 및 속성을 사용할 수 있습니다.

이 내용은 일반 텍스트 템플릿에 적용되며 전처리된 텍스트 템플릿에는 적용되지 않습니다.

호스트에 대한 액세스 획득

template 지시문에서 hostspecific="true"를 설정합니다. 이렇게 하면 ITextTemplatingEngineHost 형식의 this.Host를 사용할 수 있습니다. 이 형식에는 파일 이름을 확인하고 오류를 기록할 때와 같은 경우 사용할 수 있는 멤버가 있습니다.

파일 이름 확인

텍스트 템플릿에 관련된 파일의 전체 경로를 찾으려면 this.Host.ResolvePath()를 사용합니다.

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.IO" #>
<#
 // Find a path within the same project as the text template:
 string myFile = File.ReadAllText(this.Host.ResolvePath("MyFile.txt"));
#>
Content of myFile is:
<#= myFile #>

오류 메시지 표시

이 예제에서는 템플릿을 변환할 때 메시지를 기록합니다. 호스트가 Visual Studio인 경우에는 해당 메시지가 오류 창에 추가됩니다.

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.CodeDom.Compiler" #>
<#
  string message = "test message";
  this.Host.LogErrors(new CompilerErrorCollection() 
    { new CompilerError(
       this.Host.TemplateFile, // Identify the source of the error.
       0, 0, "0",   // Line, column, error ID.
       message) }); // Message displayed in error window.
#>

Visual Studio API 사용

Visual Studio에서 텍스트 템플릿을 실행하는 경우 this.Host를 사용하여 Visual Studio에서 제공하는 서비스와 로드된 패키지나 확장에 액세스할 수 있습니다.

hostspecific="true"를 설정하고 this.Host를 IServiceProvider로 캐스팅합니다.

이 예제에서는 Visual Studio API인 DTE를 서비스로 가져옵니다.

<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<# 
 IServiceProvider serviceProvider = (IServiceProvider)this.Host;
 DTE dte = serviceProvider.GetService(typeof(DTE)) as DTE;  
#>
Number of projects in this solution: <#=  dte.Solution.Projects.Count #>

변경 기록

날짜

변경 내용

이유

2011년 3월

작성된 항목

고객 의견