T4模板作为VS自带的一套代码生成器,功能有多强大我也不知道,最近查找了一些资料学习一下,做个笔记
更详细的资料参见:
MSDN: http://msdn.microsoft.com/zh-cn/library/bb126445.aspx
你必须懂的T4模板:深入浅出:http://www.cnblogs.com/heyuquan/archive/2012/07/26/2610959.html
准本工作:
T4模板是没有颜色高亮提示的,我们可以安装vs支持的插件,我安装的是 T4 Editor,当然还有其他比如 Visual T4等,
T4 Editor下载地址:http://t4-editor.tangible-engineering.com/Download_T4Editor_Plus_ModelingTools.html
一 .T4模板分类
T4模板分为 文本模板 和 运行时文本模板,其中文本模板 程序的源代码在程序编译前就被使用(写代码时开始编译),可以直接转换成项目的程序源码,运行时文本模板,即运行时开始编译,生成各式文档。
下面以 运行时文本模板 为例创建一个简单的实例:
其中RuntimeTextTemplate1.tt为创建的运行时文本模板,在“添加-新建项”中可以找到“运行时文本模板”
创建好的空的RuntimeTextTemplate1.tt有一些初始代码
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".html"#>
<#@ template language="C#" #> 指定使用的编程语言是C#,<#@ output extension=".html"#>指定输出的是html文件,其他的暂时不管,语法暂时不考虑,接着后面添加简单的测试代码:
<h3>运行时文本模板</h3>
<div>
hello World
</div>
下面我们查看这个模板,创建一个web窗体应用程序,WebPrintTest.T4,在index的Page_Load()中加入一下代码
RuntimeTextTemplate1 T4= new RuntimeTextTemplate1();
string str = T4.TransformText();
print.InnerHtml = str;
就可以在index.aspx中显示生成的模板,
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebPrintTest.T4.Index" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="print" runat="server">
</div>
</form>
</body>
</html>
查看一下:
运行时文档模板会产生一个类(以模板名称命名),查看一下部分代码:
二 .调试
如果要调试T4文本模板文件,首先将模板指令<#@ template #> 的debug特性值设置为true,然后倒入命名空间
<#@ import namespace="System.Diagnostics" #>
若要在模板执行的特定点启动调试器,请插入对 Debugger.Launch() 的调用。 若要在后续的点处中断执行,请插入对 Debugger.Break() 的调用,【F10】单步调试
调试过程: