昨天刚发布了Kalman Studio代码生成器,有人说T4模板不大会编写,其实很简单,会C#语法就会编写,我这里简单的介绍一下

首先,打开Visual Studio,新建一个文本文件,将扩展名改为"tt"

这时Visual Studio会为Entity.tt生成一个对应的类文件Entity.cs,这时因为Visual Studio内置了一个代码生成工具TextTemplatingFileGenerator,会自动为每个模板文件生成对应的类文件,如果你在Entity.tt中编辑好模板,然后打开Entity.cs,TextTemplatingFileGenerator会自动解析模板,将代码输出到文件Entity.cs


我们这里不需要使用TextTemplatingFileGenerator生成代码,把属性面板,自定义工具里面的文字TextTemplatingFileGenerator删掉,对应的类文件会自动删除;然后可以开始编写模板了,我这里先展示一个编写好的实体模板,然后再详细说明

代码

<#@ template language="C#v3.5" hostSpecific="true" debug="true" #>
<#@ output extension=".cs" #>
<# 
    TableHost host = (TableHost)(Host); 
    SOTable table = host.Table;
    List<SOColumn> list = host.ColumnList;
    string columnPrefix = host.GetString("ColumnPrefix");
    int prefixLevel = host.GetInt32("PrefixLevel");
    string nameSpace = host.GetString("NameSpace");
    string className = host.GetString("ClassName");
    if(string.IsNullOrEmpty(nameSpace))nameSpace = "Entity";
    if(string.IsNullOrEmpty(className))className = table.Name;
#>
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace <#= nameSpace #>
{
    /// <summary>
    /// <#= table.Comment == "" ? table.Name : table.Comment #>
    /// </summary>
    [Serializable]
    public partial class <#= className #>
    {
        <# foreach (SOColumn c in list)
        { #>/// <summary>
        /// <#= c.Comment == "" ? c.Name : c.Comment #>
        /// </summary>
        public <#= TypeUtil.DbType2TypeString(c.DataType) #> <#= StringUtil.RemovePrefix(c.Name, columnPrefix, prefixLevel).Replace(" ", "") #> { get; set; }
        
        <# } #>
        
    }
}

现在我为大家简单介绍一下T4模板语法

<#@ template language="C#v3.5" hostSpecific="true" debug="true" #>
这里可以指定模板使用的语言,hostSpecific="true"表示是否使用特定的host(Kalman Studio里面使用的是TableHost对象,必须实现接口ITextTemplatingEngineHost)

<#@ output extension=".cs" #>  指定生成文件的扩展名

<#@ assembly name="System.Data" #>
添加程序集引用,如果要使用第三方程序集,那么最好在项目中添加引用,或者加入到GAC

<#@ import namespace="System.Data" #>
导入要使用的命名空间,注意:这里的命名空间必须要在前面指定的程序集里面找得到的,比如我指定命名空间"System.Data","System.Data.Common",这些在程序集System.Data中都有的

<#@ include file="test.tt" #> 导入模板,类似Html的include用法

<#   #>  定义代码块

<#= #>  定义表达式

<#+ #>  定义变量

我觉得讲了这些大家应该可以很轻松的编写T4模板了,下次再为大家讲解如何实现一个自定义的TextTemplatingEngineHost来生成代码

转载于:https://www.cnblogs.com/lingyun_k/archive/2010/05/09/1730909.html

如何为Kalman Studio编写T4模板相关推荐

  1. 一起谈.NET技术,编写T4模板无法避免的两个话题:quot;Assembly Lockingquot;amp;quot;Debugquot;...

    在这之前,我写了一系列关于代码生成和T4相关的文章,而我现在也试图将T4引入我们自己的开发框架.在实践中遇到了一些问题,也解决了不少问题.如果你也在进行T4相关的开发,相信你也一定会遇到这些问题.为此 ...

  2. 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)

    原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大, ...

  3. 你必须懂的 T4 模板:深入浅出

    示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文 ...

  4. 基于T4模板的文档生成

    看了好几个代码自动生成的工具,用起来很方便,但有些方面还是不够自由:这些日子里忙里偷闲摸索了一番,个人觉的基于T4模板的代码生成方案还是不错的. 下面就看看这个T4到底是什么东东-- T4 = Tex ...

  5. .NET中关于T4模板的使用

    文章目录 介绍 简单说下什么是t4模版 具体使用方式 TransformText方法 自定义T4模板引擎 两种方式的比较 总结 介绍 最近工作中需要按一定的模板模型生成指定的文件,虽然可以直接拼接字符 ...

  6. T4模板使用记录,生成Model、Service、Repository

    自己目前在搭建一个.NET Core的框架,本来是打算使用前端做代码生成器直接生成到文件的,快做好了.感觉好像使用T4更方便一些,所以也就有了这篇文章~  我还是有个问题没解决,就是我想生成每个类(接 ...

  7. 创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]

    在<基于T4的代码生成方式>中,我对T4模板的组成结构.语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码.为了让由此需求的读者对T4 ...

  8. Visual Studio 编写纯C语言程序

    本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序,这里的纯C语言,指的是 ANSI C 语言. 要在 Visual Studio 里创建一个 ANSI C语言程序,请按以下步骤执 ...

  9. T4模板使用(一):认识模板及简单使用

    T4模板使用(一):认识模板 前言 简介 流程 模板内容 内容 语法 打印内容 前言 t4模板是vs里用于生成代码的一个模板工具,可以对模板编写达到一键生成自己想要代码的目的. 首先,先看一下T4模板 ...

  10. t4b代码生成_Ef+T4模板实现代码快速生成器

    效果如图,demo(点击demo可下载案例) 项目结构如图 T4BLL添加BLL.tt文件: T4Model添加Model文件: T4DAL添加DAL.tt文件: T4DAL 添加ADO.NET En ...

最新文章

  1. Flutter开发之数据存储-3-数据库存储(34)
  2. OOB套接字传输实例(达不到预期结果)
  3. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节5:假脱机(SPOOLing)技术
  4. vue_axios请求封装、异常拦截统一处理
  5. 计算机硬件技术基础第四章ppt,管理N计算机硬件技术基础第4章.ppt
  6. java中int算法的有趣现象
  7. 五月康乃馨,爱心献父母---母亲节快乐
  8. python从列表某位置开始读取_python如何读取列表中元素的位置?
  9. java获取jsp页面下拉列表框_jQuery+jsp下拉框联动获取本地数据的方法(附源码)
  10. macbook 安装iperf_三分钟学会iperf3的使用
  11. 关于flymcu烧录stm32芯片超时的问题解决
  12. springboot+vue网络课程教学网站系统java源码介绍
  13. 中标麒麟系统u盘安装_怎么从u盘启动安装中标麒麟操作系统
  14. 运行matlab报错 Runtime Error
  15. WAIC | 奇点云携「酷炫AI应用」亮相2019世界人工智能大会
  16. Linux系统U盘怎么格式化,Linux下对U盘的分区与格式化
  17. 马云关于计算机的名人名言,马云名人名言
  18. Django 解决CSRF 跨域问题总结
  19. 台式计算机usb口不识别鼠标,如何解决插入鼠标提示无法识别USB设备的问题
  20. Softer-NMS 论文笔记

热门文章

  1. 用Windows Live Writer写51cto博客
  2. Android 轻松实现语音朗读
  3. h3c等价路由(rip)
  4. java mybatis 事务,单独的使用mybatis 如何来管理事务
  5. h264解码延迟优化_OPPO Enco Free真无线双发耳机提速120ms,延迟优于苹果华为
  6. VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multi
  7. readhat7mysql_Redhat7.3安装MySQL8.0.22的详细教程(二进制安装)
  8. 【渝粤题库】国家开放大学2021春2737市场调查与商情预测题目
  9. stdlib.h函数请单
  10. 【转】XP系统电脑开机自动登陆系统