T4模板_T4基本结构
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控制块)
<#@ 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基本结构的更多相关文章
- T4模板的基本结构
(转自:http://www.cnblogs.com/yank/archive/2012/02/14/2342287.html) T4模板的基本结构 代码块的总体分类,就是两种:文本.程序脚本. 我感 ...
- T4 模板 vs2010
参阅:http://dotnet.cnblogs.com/page/78398/ T4模板的定义非常简单,整个模板的内容包括两种形式:静态形式和动态动态.前者就是直接写在模板中作为原样输出的文本,后者 ...
- 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)
原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大, ...
- 从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)
对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率.所以学好T4模板的应用,对于开发人员来说是非常重要的. 园子里对于T4模板的介绍与资料已经太 ...
- MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码
前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...
- T4模板——一个神奇的代码生成器
利用T4模板,可以很方便的从数据库映射成Model模型,相当于动软等功效.但动软是可以直接生成三层,抽象工厂的,T4没那么牛叉,所以我们一般只用作生成Modle或者Server等指定方法了. 废话少说 ...
- T4模板
T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文本模板,即一种自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调 ...
- T4模板之初体验(语法)
一.什么是T4模板 T4是Text Template Transformation Toolkit(文本模板转换工具包)的四个英文首字母的简称.是微软提供的一种代码生成引擎. 在ADO.NET实体数据 ...
- T4 模板 : 一种提升ASP.NET MVC开发速度方法
最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...
随机推荐
- 将CSV文件导入到hive数据库
将csv文件导入hive后出现了所有的字段只显示在新建的表的第一个字段中,后面的字段全是null. 出现这种的原因是hive以行分隔数据,需要修改为按逗号' , ‘ 进行分隔读取, 具体操作如下, ...
- matlab 基于 libsvm工具箱的svm分类遇到的问题与解决
最近在做基于无线感知的身份识别这个工作,在后期数据处理阶段,需要使用二分类的方法进行训练模型.本身使用matlab做,所以看了一下网上很多都是使用libsvm这个工具箱,就去下载了,既然用到了想着就把 ...
- struts2第三天——值栈
大致内容: ognl概述 ognl入门 值栈 一.OGNL概述 OGNL,全称为Object-Graph Navigation Language,对象图导航语言 它是一个功能强大的表达式语言,用来获取 ...
- 【转】C++ 枚举类型的思考
转自: http://blog.csdn.net/classfactory/article/details/87749 C++ 中的枚举类型继承于 C 语言.就像其他从 C 语言继承过来的很多特性一样 ...
- Http protocal
https://tools.ietf.org/html/rfc2616 1. 状态码:status code 1xxx:信息--请求被接收,继续下一步处理 2xxx:成功--请求行为被 ...
- 如何推行Code Review
这篇文章探讨的是如何在一个没有Code Review习惯的团队里面Code Review. 在进行Code Review的时候,审核人很多时候会对被审核人的代码指手画脚,在评价对方的代码,甚至是在批评 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- ats编译中增加透明度 选项
在大多数情况下,如果环境支持透明度,则configure将自动启用它.对于其他环境,可能需要 配置configure 选项. --enable-posix-cap 这实现了POSIX功能,这是透明度所 ...
- Hyperledger Fabric Capabilities——超级账本功能汇总
Hyperledger Fabric是一种模块化的区块链架构,是分布式记账技术(DLT)的一种独特的实现,它提供了可供企业运用的网络,具备安全.可伸缩.加密和可执行等特性.Hyperledger Fa ...
- linux一切皆文件之Unix domain socket描述符(二)
一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.主要用于 ...