T4中<#
标记和<#+
标记之间有什么区别?
答案 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