在T4预处理模板的Transformtext()方法中调用方法

时间:2012-10-20 11:49:17

标签: .net templates t4

我使用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()方法返回第一个实现(没有任何调用)?

那么如何使用一些方法并在预处理模板中生成代码?你的建议是什么?

1 个答案:

答案 0 :(得分:2)

这会有用吗?

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

PS。不知道为什么你在标题,正文和页脚内部调用

return this.GenerationEnvironment.ToString();