T4模板之基础篇
一、回顾
上一篇文章 ——T4模板之菜菜鸟篇,我们囫囵吞枣的创建了与“T4模板”有关的文件。在创建各个文件的这一个过程中,我们对于T4模板有了那么丁点的认识。现在就带着之前的那些问题,正式的迈入对“T4模板”的学习。
二、概念
2.1、类型
T4 文本模板有两种类型:
- 设计时 T4 文本模板
- 运行时 T4 文本模板
三、简要教程
我们只讲“设计时T4文本模板”,其他的都TMD属于高级部分了,哥不懂给不给?
打开之前我们创建的“TextTemplate_.tt”文件:

很明显的有一个特征,那么就是他们都是这种模式:
<#@ 指令 属性=“值”#>
就这样定了,我们按行来学习
3.1、指令:
3.1.1、模板指令
<#@ template debug="false" hostspecific="false" language="C#"#>
说的是这个模板,不可以调试,不提供host这个属性,用的是C#语言。它的完整模式如下,中括号表示可选,没有写它将按照默认处理。
<#@ template [language="VB"] [compilerOptions="options"] [culture="code"] [debug="true"] [hostspecific="true"] [inherits="templateBaseClass"] [visibility="internal"] [linePragmas="false"] #>
3.1.2、程序集指令
<#@ assembly name="System.Core"#> 它的作用类似于在 Visual Studio 项目中添加程序集引用。
3.1.3、导入指令
<#@ import namespace="System.Linq"#> 它等效于 C# 中的 “using System.Linq;”。
3.1.4、输出指令
<#@ output extension=".txt" #> 它就是告诉你,T4模板最终将生产.txt对应后缀的文件。
3.2、控制块
不难发现,如上截图,我们生成的“TextTemplate_.txt”它里面确实是什么内容都没有的。因此,更进一步的学习是“控制块”,对于不同控制块的组合,便能生成我们所需要的文件。

<# 标准控制块 #> 可以包含语句。
<#= 表达式控制块 #> 可以包含表达式。
<#+ 类特征控制块 #> 可以包含方法、字段和属性,就像一个类的内部
3.3、心动不如行动
唱首歌吧!“我是一只小小小鸟……”:

我是zeje,我们来定义一个变量 string name =“zeje”,再看看效果:

哥已经压抑了很久了,一起来呐喊吧:

发泄够了吧?仔细想想,这个类<#+ 类特征控制块 #> 还没用上。好吧,zeje就在这里自我介绍下吧:

既然都自我介绍过了,是不是可以开溜了呢?还是给大家都个红包吧!(这里可能需要另外说明,先凑合着看吧!)

生成结果如下:

上面涉及到额外的知识点:使用T4模板输出多文件,请自行学习。
四、高级篇
其实对于“T4模板”的学习,讲得最详细的还是MSDN,下面给出对应的链接,可以点开深入的了解。
- T4 文本模板编写准则
- 使用 T4 文本模板生成设计时代码
- 演练:使用文本模板生成代码
- 生成过程中的代码生成
- 文本模板的安全性
- 使用 TextTransform 实用工具生成文件
- 使用 T4 文本模板的运行时文本生成
- 编写 T4 文本模板
- T4 文本模板指令
- T4 模板指令
- T4 参数指令
- T4 输出指令
- T4 程序集指令
- T4 导入指令
- T4 包含指令
- T4 CleanUpBehavior 指令
- 文本模板控制块
- 文本模板实用工具方法
- 从文本模板访问 Visual Studio 或其他主机
- 在文本模板中使用转义序列
- 如何:使用转义序列从模板生成模板
- 调试 T4 文本模板
- T4 文本模板编写准则
- 如何:使用文本模板 ...
- 自定义 T4 文本转换
- 文本模板转换过程
- 创建自定义 T4 文本模板指令处理器
- 部署自定义指令处理器
- 演练:创建自定义指令处理器
- 在 VS 扩展中调用文本转换
- 使用自定义宿主处理文本模板
- 演练:创建自定义文本模板宿主
- T4 文本模板的 API 参考
- 命名空间
- Microsoft.VisualStudio.TextTemplating
- Microsoft.VisualStudio.TextTemplating.Modeling
- Microsoft.VisualStudio.TextTemplating.VSHost
T4模板之基础篇的更多相关文章
- T4模板试水篇1_入门
T4模板作为VS自带的一套代码生成器,功能有多强大我也不知道,最近查找了一些资料学习一下,做个笔记 更详细的资料参见: MSDN: http://msdn.microsoft.com/zh-cn/li ...
- T4模板之菜菜鸟篇
一.废话 T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎.在 Visual Studio 中,“ ...
- (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...
- (二)SpringBoot2.0基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...
- Template 基础篇-函数模板(待看
Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...
- .net 开源模板引擎jntemplate 实战演习:基础篇之入门
一.简介 模板引擎是Web开发中非常重要的一环,它负责将页面上的动态内容呈现出最终的结果展现给前端用户,在asp.net mvc中,我们最熟悉的就是Razor了,作为官方的视图引擎(视图引擎不等同于模 ...
- .net 开源模板引擎jntemplate 教程:基础篇之语法
一.基本概念 上一篇我们简单的介绍了jntemplate并写了一个hello world(如果没有看过的,点击查看),本文将继续介绍jntemplate的模板语法. 我们在讲解语法前,首先要了解一下标 ...
- .net 开源模板引擎jntemplate 教程:基础篇之在ASP.NET MVC中使用Jntemplate
在ASP.NET MVC 中使用Jntemplate 上一篇我们详细介绍了jntemplate的标签语法,本篇文章将继续介绍如何在ASP.NET MVC 中使用Jntemplate. 一.使用Jnte ...
- 前端基于react,后端基于.net core2.0的开发之路(番外篇) 后端使用T4模板,生成某些类
1.介绍 因为开发过程中,有部分类是你加一个模型,就需要去改动的,每次加非常的烦,或者有些类,你只用到了他基类的方法,但是你还必须建一个文件才能调用他基类的方法,也很烦. 这个时候,T4就非常有用了. ...
随机推荐
- 服务端API的OAuth认证实现
http://stackoverflow.com/questions/12499602/body-joints-angle-using-kinect?rq=1 新浪微博跟update相关的api已经挂 ...
- 裸的单调队列-poj-2823-Sliding Window
题目链接: http://poj.org/problem?id=2823 题目意思: 给n个数,求连续区间长度为k的最大和最小值. 解题思路: 裸的单调队列不解释,用两个队列保存. 代码: #incl ...
- vs2010:【“System.Data.OracleClient.OracleConnection”已过时】警告
在oracle 安装目录下 找到 Oracle.DataAccess.dll添加引用,然后 using Oracle.DataAccess.Client;其他的都不用动,即可.连接字符串中 如有 用的 ...
- android入门——BroadCast(2)
自定义广播 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&q ...
- js——DOM操作(二)
表格属性: tHead:表格头 tBodies:表格正文 tFoot:表格尾 rows:行 cells:列 表单操作: <form id="form1"> <in ...
- 剑指offier第10题
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表. 二进制中1的个数 时间限制:1秒空间限制:32768K
- JVM学习之类的卸载机制
类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了,当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,Sample类在方法区内的数据 ...
- HTTP POST和GET的区别[转]
http://www.cppblog.com/woaidongmao/archive/2008/05/29/51476.aspx 1.HTTP 只有POST和GET 两种命令模式: 2.POST是被设 ...
- Docker镜像与仓库(一)
Docker镜像与仓库(一) Docker镜像与仓库(一) 如何查找镜像? Docker Hub https://registry.hub.docker.com docker search [OPTI ...
- VI 配置文件(略全)
配置 ~/.vimrc文件. root则放到/etc/vimrc 具体详见代码 "====================================================== ...