我使用 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()
Method中调用方法:
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 中使用一些方法并生成代码呢?你的建议是什么?