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

  • 相关阅读:
    physicslectureGriavity
    electromagnetic
    dp
    physicsmechanic wave
    C# 2.0 Specification(迭代器)(二)
    C#类、接口、虚方法和抽象方法接口与抽象类的区别实例
    web.config connectionStrings 数据库连接字符串的解释(转载)
    onpropertychange事件
    C#中ParameterizedThreadStart和ThreadStart区别
    C# 文件操作全收录
  • 原文地址:https://www.cnblogs.com/xuf22/p/2238355.html
Copyright © 2020-2023  润新知