T4模板使用初探

     Visual Studio中的T4代码生成引擎已经出来很久了,但一直没有一个好的使用文档。而且VS中目前都没有代码智能感知。之前一直听说T4引擎很强大,但不知道怎么用也不知道哪里可又用到,上周去一家公司面试,他的解决方案中有一个项要用到T4模板来做客户端代码生成引擎。用T4来代替WSDL,可以为客户端生成SOAP之外的(如:Socket)的客户端代理类。

   查了一MSDN,11年3月份更新的文档,自己实践下

新建一个Console应用程序,然后添加一个”文本模板”,命名为NewTextTemplate.tt

image

在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“的项目,预先写好了常用的模板。

原文地址:https://www.cnblogs.com/xuf22/p/2238355.html