T4中<#和<#+有什么区别?

时间:2010-08-02 03:12:12

标签: .net t4

T4中<#标记和<#+标记之间有什么区别?

3 个答案:

答案 0 :(得分:17)

The docs解释:

  

标准控制块

     

标准控制块是生成输出文件一部分的程序代码的一部分。

     

您可以在模板文件中混合任意数量的文本块和标准控制块。但是,您不能将一个控制块放在另一个控制块内。每个标准控制块由符号<# ... #>分隔。

     

...

     

类功能控制块

     

类功能控制块定义不应包含在主变换中的属性,方法或任何其他代码。类特征块经常用于辅助函数。通常,类功能块放在单独的文件中,以便多个文本模板可以包含它们。

     

类特征控制块由符号<#+ ... #>

分隔      

例如,以下模板文件声明并使用方法:

<#@ output extension=".txt" #>
Squares:
<#
    for(int i = 0; i < 4; i++)
    {
#>
    The square of <#= i #> is <#= Square(i+1) #>.
<#
    } 
#>
That is the end of the list.
<#+   // Start of class feature block
private int Square(int i)
{
    return i*i; 
}
#>

答案 1 :(得分:6)

阅读文档并不会立即明显区别于它。它们都是生成模板中包含的代码。

This article archive让它更加清晰。

要查看操作上的差异,请使用以下内容创建运行时文本模板:

<#@ template language="C#" #>
<# // STANDARD CONTROL BLOCK #>
<#+ // CLASS FEATURE BLOCK #>

生成的类看起来基本上是这样的:

public class Something
{
    public string TransformText()
    {
 // STANDARD CONTROL BLOCK 
        return this.GenerationEnvironment.ToString();
    }
 // CLASS FEATURE BLOCK 
}

如您所见,标准控制块放在TransformText方法中,而类功能放在类级别。

答案 2 :(得分:4)

类功能控制块是一个可以在其中定义辅助方法的块。该块由<#+...#>分隔,并且必须显示为文件中的最后一个块。 Ref