T4系列文章之一:认识T4

一、相关文章链接

MSDN:Code Generation and T4 Text Templates
博客园:编写T4模板进行代码生成

二、T4简介

T4指的是4个T开头的英文单词——Text Template Transformation Tookit,即文本模板转换工具。
T4模板语言是一个模板代码生成语言,什么意思呢?就是通过模板,生成相应的我们需要的文件。很好理解,比如我们在写类的时候,通常要新建一个类文件,这时候它出来的页面并非空白,而是有一些基本的内容,比如我新建一个MyTest的类文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLL
{
    class MyTest
    {
    }
}

所以,上面的这些常用内容就是用模板语言来生成的。
T4模板的后缀名是.tt,我们可以在VS2013中进行使用,如下图:
这里写图片描述
“文本模板”和“运行时文本模板”就是T4模板文件,下面说一下两者的区别。
我们在写C#代码的时候也分为编译时和运行时,运行时就是在程序开始执行的时候才开始,而编译时是在你写代码那一刻就开始。更具体的例子说,假如我们有一个错误,如果是编译时错误,那么我们写完后就会被检测出来,但有些错误无法在编译时被检测出来,比如内存泄漏等等,这个必须要在程序运行的时候才能知道。
运行时文本模板可以在程序运行时生成文本字符串,文本模板在编译完毕并保存后就能生成相应的文件。

三、运行时文本模板

运行时文本模板和文本模板(下面会介绍)属性的唯一不同点是:自定义工具的值不同。运行时文本模板的是:TextTemplatingFilePreprocessor,文本模板的是:TextTemplatingFileGenerator。
现在先新建运行时文本模板文件,对于它的一些语法,我们暂时先不考虑,我们会在下一节进行说明。文件创建完成后,截图如下:
这里写图片描述

我们在RuntimeTextTemplate1.tt中加入以下代码:

<#@ output extension=".html"#>
<h2>运行时文本模板</h2>
<table>
    <#for(int i=0;i<10;i++)
      {#>
      <tr>
          <td>数字:<#=i#></td>
          <td>倍数:<#=i*i#></td>
      </tr>
    <#}#>
</table>

我们现在只需要知道它的输出类型是.html,extension=”.html”表示它输出的内容是网页文件。那我们怎么查看输出结果呢?
比如我们需要在aspx里调用这个模板文件,那么我只在需要触发事件的方法里面调用这个就OK,比如我这里是在page_load的时候,把模板里的内容显示到页面上。在此之前我在前台页面添加了一个控件,代码如下:
< label id=”lblContent” runat=”server”>< /label>

protected void Page_Load(object sender, EventArgs e)
{
    RuntimeTextTemplate1 t4 = new RuntimeTextTemplate1();
    string str = t4.TransformText();
    lblContent.InnerText = str;
}

运行截图如下:
这里写图片描述
好了,接下来我们说说文本模板。

四、文本模板

文件创建完成后,截图如下:
这里写图片描述

1、生成txt文件
我们在TextTemplate1.tt中加入以下代码:

<#@ output extension=".txt" #>
<h2>文本模板.txt</h2>
<table>
    <#for(int i=0;i<10;i++)
      {#>
      <tr>
          <td>数字:<#=i#></td>
          <td>倍数:<#=i*i#></td>
      </tr>
    <#}#>
</table>

这个结果怎么看呢?很简单,保存之后你只需要展开TextTemplate1.tt,就会看到一个TextTemplate1.txt文件(因为上面的output设置为.txt),截图如下:
这里写图片描述
TextTemplate1.txt文件中的内容如下:
这里写图片描述

2、生成html文件
我们在TextTemplate1.tt中加入以下代码,它和上面的唯一区别就是output不一样:

<#@ output extension=".html" #>
<h2>文本模板.html</h2>
<table>
    <#for(int i=0;i<10;i++)
      {#>
      <tr>
          <td>数字:<#=i#></td>
          <td>倍数:<#=i*i#></td>
      </tr>
    <#}#>
</table>

查看结果截图如下:
这里写图片描述
TextTemplate1.html文件中的内容如下:
这里写图片描述

3、生成cs文件
我们在TextTemplate1.tt中加入以下代码,它和上面的主要区别就是output不一样:

<#@ output extension=".cs" #>
<#var properties = new string[]{"P1","P2","P3"};#>
class GeneratedClass{
<#foreach(string propertyName in properties)
  {#>
    private int <#= propertyName#>=9;
<#}#>
}

查看结果截图如下:
这里写图片描述
TextTemplate1.cs文件中的内容如下:
这里写图片描述

我们这里模拟了类文件的生成,你想到了什么呢?

五、总结

T4模板的基本介绍就先到这里,可能现在你有好多地方搞不清楚,比如说T4的语法等等,木有关系,我会在下一节中对T4语法进行梳理讲解。

声明:我在原文的基础上做了部分修改,希望能更有助于大家的学习。
原文链接:http://www.cnblogs.com/damonlan/archive/2012/01/12/2306663.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值