0

T4 と Preprocessed Template を使用してコードを生成します。したがって、すべてのテンプレートを .tt ファイルに直接追加すると、次のようにすべて問題ありません。

<#@ template language="C#" #>
<html><body>
<h1>Sales for Previous Month</h2>
<table>
    <# for (int i = 1; i <= 10; i++)
       { #>
         <tr><td>Test name <#= i #> </td>
             <td>Test value <#= i * i #> </td> </tr>
    <# } #>
 </table>
This report is Company Confidential.
</body></html>

しかし、いくつかのメソッドでコードをグループ化し、メソッドでメソッドを呼び出す必要がありますtransformText()

MyTemplate.tt ファイルは次のようになります。

<#@ template language="C#" #>
<#+ 

    private string header(){
#>
<html><body>
<h1>Sales for Previous Month</h2>

<#+ 
    return this.GenerationEnvironment.ToString();
}


private string body() {
#>
    <table>
    <#+ for (int i = 1; i <= 10; i++) { #>

     <tr><td>Test name <#= i #> </td>
         <td>Test value <#= i * i #> </td> </tr>
    <#+ } #>
 </table>
<#+ 
    return this.GenerationEnvironment.ToString();
}


private string footer(){
#>
    This report is Company Confidential ..
</body></html>
<#+ 
    return this.GenerationEnvironment.ToString();
}
#>

関連する MyTemplate.cs ファイルは次のようになります。

// .... 

public virtual string TransformText()
    {
        return this.GenerationEnvironment.ToString();
    }
// .... 

したがって、次のようにメソッド内のメソッドを呼び出しますTransformText()

// .... 

 public virtual string TransformText()
    {
        header();
        body();
        footer();
        return this.GenerationEnvironment.ToString();
    }
// .... 

まだすべて問題ありませんが、.tt ファイルを変更して保存すると、.cs ファイルが再生成され、TransformText()メソッドは最初の実装に戻ります (呼び出しなし)。

では、Preprocessed Template でいくつかのメソッドを使用してコードを生成するにはどうすればよいでしょうか? あなたの提案は何ですか?

4

1 に答える 1

2

これは機能しますか?

<#@ template language="C#" #>
<#
    header ();
    body ();
    foooter ();
#>
<#+ ... the rest ... #>

PS。ヘッダー、ボディ、フッター内で呼び出す理由がわからない

return this.GenerationEnvironment.ToString();
于 2012-10-21T11:22:30.577 に答える