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开发速度方法
最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...
随机推荐
- 20155213 《网络攻防》 Exp1 PC平台逆向破解
20155213 <网络攻防> Exp1 PC平台逆向破解(5)M 实践内容 通过对实践对象--pwn20155213的linux可执行文件的修改或输入,完成以下三块: 手工修改可执行文件 ...
- 20155227《网络对抗》Exp1 PC平台逆向破解(5)M
20155227<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...
- pwd的实现20155301
pwd的实现 任务要求: 1) 学习pwd命令 2) 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3) 实现mypwd 4) 测试mypwd 实现过程 1)首先查看是否有有用 ...
- WPF 访问资源中的Storyboard
原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...
- OSG环境变量设置
osg中需要设置一些环境变量设置,如 OSG_FILE_PATH:此变量设置模型数据的目录 OSG_SCREEN: 此变量设置显示模型是在单屏幕还是多屏幕,1为单屏幕 OSG_WINDOW: 此变量设 ...
- 10.23 开课一个月零十九天 (PHP数组)
<?php $s = "he8llo5wor6ld"; $s = preg_replace("/\d/","#",$s); //按照正 ...
- 10 star组件之分页, search模糊查询, action批量处理
1.分页组件高阶 1.分页的class形式(有bug,请看下面的) """ 自定义分页组件 """ class Pagination(obj ...
- 【HAOI2010】软件安装
题面 题解 缩点之后一个裸的树型背包 代码 #include<cstdio> #include<cstring> #include<algorithm> #defi ...
- bintray 在android3.2上传遇到的问题
1.报错信息如下: Gradle DSL method not found: 'google()'Possible causes: The project 'JustTest' may be usin ...
- git 自己易忘的命令
1. git 更新远程分支列表 git remote update origin --prune git remote update origin -p 2. 查看远程分支: git branch - ...