T4文本模板由 指令块、文本块、控制块 组成。

一. 指令块(MSDN文本模板指令

指令块以@开头,基本的指令块包括<#@ template #> 、<#@ parameter# >、
<#@ assembly>、<#@ import #> 、<#@ include#>、<#@ output#>
其中<#@ template #>是必须的,定义了该模板的基本属性

1.模板指令:

<#@ template [language="VB"] [compilerOptions="options"] [culture="code"] [debug="true"]            [hostspecific="true"] [inherits="templateBaseClass"] [visibility="internal"] [linePragmas="false"] #>

模板指令所有特性都是可选的。
      compilerOptions特性:对运行时模板忽略。
  culture特性指定将表达式转换为文本时要使用的区域性。表示为xx-XX形式,有效值有en-US、ja-JP、de-CH、de-DE
  debug特性 是否启用调试
  inherits特性可以指定模板的程序代码可以继承自另一个类,这个类也可以是模板生成的。如果不指定inherits则会从您的文本模板生成基类和派生类。
  visibility 可见性特性,有效值 public(默认)、internal

2.参数指令

<#@ parameter type="Full.TypeName" name="ParameterName" #>

3.输出指令

<#@ output extension=".fileNameExtension" [encoding="encoding"] #>

extension特性 指定生成的文本输出文件的文件扩展名,可接受任何有效的文件扩展名。默认值.cs

  encoding特性指定生成输出文件时要使用的编码,比如encoding="utf-8"  

4.程序集指令

<#@ assembly name="[assembly strong name|assembly file name]" #>

在预处理文本模板中,assembly特性无效,改为在VS的"引用"中添加。如果程序集已经在GAC里面注册,那么只需要写上程序集名称即可,如<#@ assembly name="System.Data.dll" #>,否则需要指定程序集的物理路径

5.导入指令

<#@ import namespace="namespace" #>

  默认情况下会导入System命名空间的引用。

6.包含指令

<#@ include file="filePath" [once="true"] #>

file可以使绝对的或相对当前模板文件。file可以包括用“%”分割的环境变量,如<#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>包含指令可以提高代码的复用率,比如可以将一些常用的程序集、命名空间引用放到一个文件里,使用时仅需要应用即可,如,建立Reference.ttinclude文件,里面包含了我们平时常用的程序集引用,使用时只需要使用包含指令引用即可:

<#@ include file="$(ProjectDir)Reference.ttinclude" #>

二 .文本块(MSDN文本块

文本块直接向输出文件插入文本。文本块没有特殊格式,例如,下面的文本模板将生成一个包含“Hello”的文本文件

<#@ output extension=".txt" #>
Hello
 

三 .控制块(MSDN控制块

     控制块是用于转换模板的程序代码节。 默认语言是 C#,但若要使用 Visual Basic,可以在文件开头编写以下指令:
<#@ template language="VB" #>

注:用于编写的控制块代码的语言与生成的文本语言无关。

3.1标准控制块

   在模板文件中可以混合使用任意数量的文本块和标准控制块。但是不能再控制块中嵌套控制块。每个标准控制块都以<# #>符号分隔。例如:使用下面的空子块和文本块,输出结果“0,1,2,3,4 Hello!”:

<#
for(int i = ; i < ; i++)
{
Write(i + ", ");
}
Write("");
#> Hello!

还可以交错文本和代码,而不必使用显示Write()语句,以下输出“Hello!”4次:

<#
for(int i=;i<;i++)
{
#>
Hello! <# } #>

3.2 表达式控制块

表达式控制块计算表达式并将其转换为字符串,输入到文件中。  表达式控制块以<#=... #>符号分隔。以下输出文件包含“5”:

<#=+ #>

 注意:开始符号有3个“<#=”。 表达式可以包含作用域的任何变量,如:

<#@ output extension=".txt" #>
<#
for(int i=;i<;i++)
{
#>
this is hello number <#=i+ #>: Hello!
<#
}
#>

3.3 类功能控制块

  类功能控制块定义 属性、方法或不应包含在主转换中的所有其他代码。类功能块常用于编写帮助器函数。通常,类功能块位于单独的文件中,这样他们可以包含在多个文本模板中。

类功能控制块以<#+...#>符号分隔。例如以下模板文件声明并使用一个方法:

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

类功能块必须编写在文档末尾

类功能块可以包含文本块

List of Squares:
<#
for(int i=;i<;i++)
{ WriteSquareLine(i); }
#>
End of List.
<#+ //class feature Block
private void WriteSquareLine(int i)
{
#>
the Square of <#= i #> is <#= i*i #>.
<#
}
#>

T4模板_T4基本结构的更多相关文章

  1. T4模板的基本结构

    (转自:http://www.cnblogs.com/yank/archive/2012/02/14/2342287.html) T4模板的基本结构 代码块的总体分类,就是两种:文本.程序脚本. 我感 ...

  2. T4 模板 vs2010

    参阅:http://dotnet.cnblogs.com/page/78398/ T4模板的定义非常简单,整个模板的内容包括两种形式:静态形式和动态动态.前者就是直接写在模板中作为原样输出的文本,后者 ...

  3. 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)

    原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大, ...

  4. 从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)

    对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太 ...

  5. MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...

  6. T4模板——一个神奇的代码生成器

    利用T4模板,可以很方便的从数据库映射成Model模型,相当于动软等功效.但动软是可以直接生成三层,抽象工厂的,T4没那么牛叉,所以我们一般只用作生成Modle或者Server等指定方法了. 废话少说 ...

  7. T4模板

    T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文本模板,即一种自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调 ...

  8. T4模板之初体验(语法)

    一.什么是T4模板 T4是Text Template Transformation Toolkit(文本模板转换工具包)的四个英文首字母的简称.是微软提供的一种代码生成引擎. 在ADO.NET实体数据 ...

  9. T4 模板 : 一种提升ASP.NET MVC开发速度方法

    最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...

随机推荐

  1. 接口与协议学习笔记-AMBA片上通信协议_APB_AHB_AXI_AXI4不同版本(二)

    随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片上总线设计是最 ...

  2. MIPS架构——汇编代码转机器代码编译器 Matlab GUI

    MIPS架构下的MCU,指令集包含R-Type.I-Type.J-Type三种,在数电课程设计时为了给MCU编写指令集,需要将汇编语言转化成机器代码,这里分享一下自己写的Matlab 的 GUI. 主 ...

  3. 大数据入门第九天——MapReduce详解(六)MR其他补充

    一.自定义in/outputFormat 1.需求 现有一些原始日志需要做增强解析处理,流程: 1. 从原始日志文件中读取数据 2. 根据日志中的一个URL字段到外部知识库中获取信息增强到原始日志 3 ...

  4. Python urllib模块学习

    urlopen()与urlretrieve() 1.urlopen()方法 urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像本 ...

  5. JavaEE笔记(一)

    Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...

  6. Oracle OEM启动方法

    首先要启动 listener: lsnrctl start 对于dbconsole:emctl start dbconsole

  7. pandas:对字符串类型做差分比较

    1. 问题需求 某种行为最常发生时段.最少发生时段与X天前是否一致 需求变形:判断上下行数据是否一致 2. 预备知识 2.1 Series.ne(Series) 判断两个Series是否相等 impo ...

  8. P3871 [TJOI2010]中位数

    傻逼题 维护两个系统堆即可 #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; ...

  9. XAF-如何实现自定义权限系统用户对象

    本示例使用XPO. 新建一个XAF项目.填加两个类进来:   [DefaultClassOptions] public class Employee : Person { public Employe ...

  10. 一个很NB的404页面

    一个带彩蛋的 404 页面 不得不说这个程序猿很有才 前往404页面 触发方法 按住鼠标左键 在页面中心不停的画圈 就可以进入神奇的地方了