2008-10-15 3 views
1

코드 생성을 위해 T4를 조사하기 시작합니다.T4 ClassBlock 메서드 내에서 템플릿을 사용하려면 어떻게해야합니까?

난 당신이 C#을/영리 물건을 수행 할 수있는 비주얼 베이직의 작은 덩어리를 포함 할 수있는 기본 템플릿을 가지고 얻을 ...

<#@ template language="VB" debug="True" hostspecific="True" #> 
<#@ output extension=".vb" debug="True" hostspecific="True" #> 
Imports System 
<#For Each Table as String in New String(0 {"Table1","Table2"}#> 
Public Class <#=Table#>DA 
    Public Sub New 
     <#= WriteConstructorBody() #> 
    End Sub 
End Class 
<#Next#> 
<#+ 
    Public Function WriteConstructorBody() as String 
     return "' Some comment" 
    End function 
#> 

이 대단한이 .. 그러나 내가 수 있도록하고 싶습니다 따라서 내 주요 블록을 ... 작성

<#@ template language="VB" debug="True" hostspecific="True" #> 
<#@ output extension=".vb" debug="True" hostspecific="True" #> 
Imports System 
<# 
For Each BaseTableName as String in New String(){"Table1","Table2"} 
    WriteRecDataInterface(BaseTableName) 
    WriteRecDataClass(BaseTableName) 
    WriteDAInterface(BaseTableName) 
    WriteDAClass(BaseTableName) 
Next 
#> 

은 그럼 방법은 클래스 블록에 존재하는 WriteX을 가질 수 있도록하고 싶습니다하지만 자체 코드 블록을 탈출 즉 예에 의해 코드를 사용하여 쓸 수.

어떻게하면됩니까?

답변

1

정적 출력을 클래스 블록의 템플릿 코드와 함께 사용할 수있는 것처럼 보입니다. 다음은 C#을 가진 예는 다음과 같습니다

<#@ template language="C#" #> 
<# HelloWorld(); #> 
<#+ 
    private string _field = "classy"; 
    private void HelloWorld() 
    { 
     for(int i = 1; i <= 3; i++) 
     { 
#> 
Hello <#=_field#> World <#= i #>! 
<#+ 
     } 
    } 
#> 
+0

날의 <대한 # 물건은 혼란스러운 문제였습니다. –

2

당신은 쓸 수 있습니다 .....

나는 .... 당신의 예에서 정적 텍스트를 찾을 하드 지켜 볼 수밖에 없었습니다
<#@ template language="VB" debug="True" hostspecific="True" #> 
<#@ output extension=".vb" debug="True" hostspecific="True" #> 
Imports System 
<# 
For Each BaseTableName as String in New String(){"Table1","Table2"} 
    WriteRecDataInterface(BaseTableName) 

    ' WriteRecDataClass(BaseTableName) 
    ' WriteDAInterface(BaseTableName) 
    ' WriteDAClass(BaseTableName) 
Next 
#> 


<#+ Public Sub WriteRecDataInterface(BaseTableName as String)#> 
    Some Templated unescaped code might go here 
    <#+ For SomeLoopVar as Integer = 1 to 10 #> 
     Some Templated unescaped code might go here 
    <#+ Next #> 
    Some Templated unescaped code might go here 
<#+ End Sub #> 
'... 
'... 
' Other Subs left out for brevity 
'... 
관련 문제