2011-09-21 2 views
5

템플릿의 출력을 생성하는 데 사용할 수있는 클래스를 생성하기 위해 TextTemplatingFilePreprocessor와 함께 사용되는 T4 템플릿이 있습니다.조건부 컴파일 기호를 T4 템플릿 내에서 사용할 수 있습니까

T4 템플릿의 시작 부분에서 여러 개의 네임 스페이스를 가져옵니다. 예 :

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 
//... 

나는 (동일한 인터페이스를 제공하지만 ProductX에 기능을 서로 다른) 네임 스페이스의 또 다른 세트와 이러한 수입을 전환 할 Preprocessor Directives를 사용하고 싶습니다. 예 :

<# 
#if(ProductX) 
{ 
#> 
    <#@ import namespace="Company.ProductX.Widgets" #> 
    <#@ import namespace="Company.ProductX.Services" #> 
    //... 
<# 
} 
#endif 
#> 
<# 
#if(ProductY) 
{ 
#> 
    <#@ import namespace="Company.ProductY.Widgets" #> 
    <#@ import namespace="Company.ProductY.Services" #> 
    //... 
<# 
} 
#endif 
#> 

위의 예제에서 가져 오기는 전 처리기 지시문과 상관없이 클래스에서 해당 using 문을 만드는 것처럼 보입니다. 예 :

T4 템플릿의 프리 프로세서를 사용하여 템플릿 출력이 아닌 템플릿 자체에 영향을주는 다른 방법이 있습니까?

답변

5

예에서 전처리 기 지시문이 생성 된 출력으로 삽입됩니다. 잠재적으로 할 수있는 일은 올바른 네임 스페이스를 가져오고 < # @ include #>을 사용하여 템플릿 코드를 포함하는 ProductX.tt 파일을 만드는 것입니다. 이 같은

뭔가 (ProductX.tt) :

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

(ProductY.tt) :이 당신을 도움이된다면

<#@ import namespace="Company.ProductY.Widgets" #> 
<#@ import namespace="Company.ProductY.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

나는 확실하지 않다 그러나 나는 조금 고민하고 정직하게 여기에는 유스 케이스가 포함되어 있습니다.

+0

우리는 이렇게 '헤더'템플릿을 사용하여 매우 잘 작동한다는 것을 알 수 있습니다. 제품에 내장 된 지시문 주위에 조건문을 삽입하는 방법은 없습니다. – GarethJ

+0

답변 해 주셔서 감사합니다. 이것은 좋은 일처럼 들립니다. 일단 작동 시키면 해결책으로 표시됩니다. –

0

이전 질문에 대한 새로운 아이디어.

Custom T4 Text Template Directive Processor을 사용하여 임의 코드를 T4 출력으로 전달할 수 있습니다.

사용자 지정 지침 프로세서를 사용하려면 각 컴퓨터에 등록해야합니다.

+1

본질적으로 사용자 정의 include 지시문 인 사용자 정의 지시문 프로세서를 작성할 수 있습니다. 헤더 템플릿 접근 방식에 비해 많은 작업이 필요합니다. – GarethJ