【问题标题】:Call Methods in Transformtext() Method at T4 Preprocessed Template在 T4 预处理模板的 Transformtext() 方法中调用方法
【发布时间】:2012-10-21 19:22:30
【问题描述】:

我使用 T4 和预处理模板来生成一些代码。因此,当我直接在 .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 中使用一些方法并生成代码呢?你的建议是什么?

【问题讨论】:

    标签: .net templates t4


    【解决方案1】:

    这行得通吗?

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

    PS。不知道为什么你在页眉、正文和页脚中调用

    return this.GenerationEnvironment.ToString();
    

    【讨论】:

    • 另请注意,您通常会使子方法无效,而不是返回 GenerationEnvironment 方法的当前进度。
    • @FuleSnabel 我在这里问了一个类似的问题:stackoverflow.com/questions/13838142/… 请你检查一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2017-08-21
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多