T4模板的基本结构

(转自:http://www.cnblogs.com/yank/archive/2012/02/14/2342287.html)

T4模板的基本结构

代码块的总体分类,就是两种:文本、程序脚本

我感觉这样分类就够了,跟我们用c#写代码生成原理差不多。也是又C#代码和文本组成的。

文本:就是需要生成的文本

程序脚本:内部执行,最终生成想要的文本。T4中<# #>中的部分都属于程序脚本内容。

为了细分语法,方便大家更好的理解,用“块”(Block)来表示构成T4模板的基本单元,它们基本上可以分成5类:指令块(Directive Block)、文本块(Text Block)、代码语句块(Statement Block)、表达式块(Expression Block)和类特性块(Class Feature Block)。

1、指令块(Directive Block)

和ASP.NET页面的指令一样,它们出现在文件头,通过<#@…#>表示。其中<#@ template …#>指令是必须的,用于定义模板的基本属性,比如编程语言、基于的文化、是否支持调式等等。比较常用的指令还包括用于程序集引用的<#@ assembly…#>,用于导入命名空间的<#@ import…#>等等。

指令通常是模板文件或包含的文件中的第一个元素。不应将它们放置在代码块 <#...#> 内,也不应放置在类功能块 <#+...#> 之后。

T4 模板指令

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

T4 参数指令

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

T4 输出指令

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

T4 程序集指令

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

T4 导入指令

<#@ import namespace="namespace"#>

T4 包含指令

<#@ include file="filePath"#>

2、文本块(Text Block)

文本块就是直接原样输出的静态文本,不需要添加任何的标签。

3、代码语句块(Statement Block)

代码语句块通过<#Statement#>的形式表示,中间是一段通过相应编程语言编写的程序调用,我们可以通过代码语句快控制文本转化的流程。在上面的代码中,我们通过代码语句块实现对一个数组进行遍历,输出重复的Console.WriteLine("Hello {0},Welcome to T4 World!","<#= p.Name #>");语句。

4、表达式块(Expression Block)

表达式块以<#=Expression#>的形式表示,通过它之际上动态的解析的字符串表达内嵌到输出的文本中。比如在上面的foreach循环中,每次迭代输出的人名就是通过表达式块的形式定义的(<#=  p.Name #>)

5、类特性块(Class Feature Block)

如果文本转化需要一些比较复杂的逻辑,我们需要写在一个单独的辅助方法中,甚至是定义一些单独的类,我们就是将它们定义在类特性块中。类特性块的表现形式为<#+ FeatureCode #>,对于Hello World模板,得到人名列表的GetPersonList方法就定义在类特性块中。

时间: 2024-10-18 15:18:01

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

T4模板试水篇2_T4基本结构

T4文本模板由 指令块.文本块.控制块 组成. 一. 指令块(MSDN文本模板指令) 指令块以@开头,基本的指令块包括<#@ template #> .<#@ parameter# >.<#@ assembly>.<#@ import #> .<#@ include#>.<#@ output#>其中<#@ template #>是必须的,定义了该模板的基本属性    1.模板指令: <#@ template [lan

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

原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大,基本将Web层要使用到的大部分函数都用模板生成了出来,而模板中的函数,很多也是互相关联调用的.另外在DotNet.Utilities(公共函数项目)中也添加与修改了一些类和函数. 需要特别说明的是,在逻辑层添加了July大神编写的超强上传类,具体怎么使用功能怎么强大,在后面调用到时会用一个章节详细说

T4模板_根据DB生成实体类

为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文件添加代码: <#@ template language="C#" debug="True" hostspecific="True" #> <#@ assembly name="System.Data" #> <#@ assembly

T4模板

T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文本模板,即一种自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调用的字符串.(模型以适合于应用程序域的形式包含信息,并且可以在应用程序的生存期更改) VS本身只提供一套基于T4引擎的代码生成的执行环境,由下面程序集构成: Microsoft.VisualStudio.TextTemplating.10.0.dll Microsoft.VisualStudio.T

[MVC学习笔记]2.使用T4模板生成其他类的具体实现

      在前篇中我们已经将User类中的代码做了具体的实现,但仍然有多个实体类未实现,以后可能还会增加新的数据表,数据表结构也有可能发生变化,所以我们使用T4模板来完成类的生成,这样就算数据库表发生了改变,也会自动根据改变后的实体对类进行重新生成. 下面是数据访问层的T4模板文件Dal.tt <#@ template language="C#" debug="false" hostspecific="true"#> <#@

Ef+T4模板实现代码快速生成器

转载请注明地址:http://www.cnblogs.com/cainiaodage/p/4953601.html 效果如图,demo抛砖引玉,还望大家不吝赐教.(点击demo下载案例) 项目结构如图 T4BLL添加BLL.tt文件: T4Model添加Model文件: T4DAL添加DAL.tt文件: T4DAL 添加ADO.NET Entity Data Model选择dababase first 模式: 打开Model1.edmx文件下的Model1.tt打开,复制内容替换了T4Model

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

对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太多了,所以在这里我就不再详细讲述基础知识了,只是说说T4模板在本框架中的具体应用与实践. 一.创建逻辑层项目 二.添加引用 将之前添加的三个项目添加到引用 三.创建T4模板放置的文件夹,并命名为SubSonic 四.将Solution.DataAccess项目中SubSonic文件夹下的Multip

T4模板之初体验(语法)

一.什么是T4模板 T4是Text Template Transformation Toolkit(文本模板转换工具包)的四个英文首字母的简称.是微软提供的一种代码生成引擎. 在ADO.NET实体数据模型和EF框架中,那些根据数据库表结构自动生成的代码就是根据这种引擎来生成的,所以当我们对VS自动生成的代码不满意或有特殊需求,则可以修改T4模板来达到目的. 在VS2012中,通过下面步骤可以添加T4模板(以.tt为后缀名): 其中“文本模板”和“运行时文本模板”是微软提供的两种T4模板 当添加一

PetaPoco的T4模板报错的问题

用NuGet安装好PetaPoco后,利用自带的T4模板生成POCO和dbcontext,配置好T4模板后运行报错. 错误 正在编译转换: 类.结构或接口成员声明中的标记"this"无效错误 正在编译转换: 方法必须具有返回类型错误 正在编译转换: "GeneratedTextTransformation.Write()"必须声明主体,因为它未标记为 abstract.extern 或 partial错误 正在编译转换: 应输入标识符 打开PetaPoco.Core