Visual Studio中的T4代码生成引擎已经出来很久了,但一直没有一个好的使用文档。而且VS中目前都没有代码智能感知。之前一直听说T4引擎很强大,但不知道怎么用也不知道哪里可又用到,上周去一家公司面试,他的解决方案中有一个项要用到T4模板来做客户端代码生成引擎。用T4来代替WSDL,可以为客户端生成SOAP之外的(如:Socket)的客户端代理类。
查了一MSDN,11年3月份更新的文档,自己实践下
新建一个Console应用程序,然后添加一个”文本模板”,命名为NewTextTemplate.tt
在NewTextTemplate.tt文件中添加如下代码
1: <#@ template debug="false" hostspecific="false" language="C#" #>
2: <#@ output extension=".txt" #>
3:
4:
5: <#@ template debug="false" hostspecific="false" language="C#" #>
6: <#@ output extension=".cs" #>
7: <# var properties = new string [] {"P1", "P2", "P3"}; #>
8: class MyGeneratedClass {
9: <#
10: foreach (string propertyName in properties)
11: { #>
12: private int <#= propertyName #> = 0;
13: <# } #>
14: }
保存文件时会提示“操作可能对您的计算有危害”,点击确定后展开NewTextTemplate.tt目录,打开NewTextTemplate.txt,已生成如下代码:
class MyGeneratedClass { private int P1 = 0; private int P2 = 0; private int P3 = 0; }
分析代码:
第1-6行代码,为T4引擎的指令,T4引擎指令请参见http://msdn.microsoft.com/zh-cn/library/bb126421.aspx
第7行之后的代码为生成代码的代码。T4的语法看上去和Asp差不多."<#……#>"符号间的为动态代码。"<#……#>"之外的也就原文输出。Visual Studio中对没有.tt格式的文本没有方法高亮显示,也没有智能感知功能。
MSDN上没有提到代码生成的详细过成,TextTransform.exe应该就是T4引擎的核心工具。T4在很多地方用到,DataEntity Model就是用T4来完成的。在DataEntity Model中打开.tt文件,看到的就是T4引擎脚本,如果要修改DataEntity生成的类,可以通过修改.tt模板来修改。CodePlex上有一个名为”T4 TollBox“的项目,预先写好了常用的模板。