如何为Kalman Studio编写T4模板
昨天刚发布了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删掉,对应的类文件会自动删除;然后可以开始编写模板了,我这里先展示一个编写好的实体模板,然后再详细说明
<#@ 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模板相关推荐
- 一起谈.NET技术,编写T4模板无法避免的两个话题:quot;Assembly Lockingquot;amp;quot;Debugquot;...
在这之前,我写了一系列关于代码生成和T4相关的文章,而我现在也试图将T4引入我们自己的开发框架.在实践中遇到了一些问题,也解决了不少问题.如果你也在进行T4相关的开发,相信你也一定会遇到这些问题.为此 ...
- 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)
原本关于T4模板原想分5个章节详细解说的,不过因为最近比较忙,也不想将整个系列时间拉得太长,所以就将它们整合在一块了,可能会有很多细节没有讲到,希望大家自己对着代码与模板去研究. 本章代码量会比较大, ...
- 你必须懂的 T4 模板:深入浅出
示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文 ...
- 基于T4模板的文档生成
看了好几个代码自动生成的工具,用起来很方便,但有些方面还是不够自由:这些日子里忙里偷闲摸索了一番,个人觉的基于T4模板的代码生成方案还是不错的. 下面就看看这个T4到底是什么东东-- T4 = Tex ...
- .NET中关于T4模板的使用
文章目录 介绍 简单说下什么是t4模版 具体使用方式 TransformText方法 自定义T4模板引擎 两种方式的比较 总结 介绍 最近工作中需要按一定的模板模型生成指定的文件,虽然可以直接拼接字符 ...
- T4模板使用记录,生成Model、Service、Repository
自己目前在搭建一个.NET Core的框架,本来是打算使用前端做代码生成器直接生成到文件的,快做好了.感觉好像使用T4更方便一些,所以也就有了这篇文章~ 我还是有个问题没解决,就是我想生成每个类(接 ...
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
在<基于T4的代码生成方式>中,我对T4模板的组成结构.语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码.为了让由此需求的读者对T4 ...
- Visual Studio 编写纯C语言程序
本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序,这里的纯C语言,指的是 ANSI C 语言. 要在 Visual Studio 里创建一个 ANSI C语言程序,请按以下步骤执 ...
- T4模板使用(一):认识模板及简单使用
T4模板使用(一):认识模板 前言 简介 流程 模板内容 内容 语法 打印内容 前言 t4模板是vs里用于生成代码的一个模板工具,可以对模板编写达到一键生成自己想要代码的目的. 首先,先看一下T4模板 ...
- t4b代码生成_Ef+T4模板实现代码快速生成器
效果如图,demo(点击demo可下载案例) 项目结构如图 T4BLL添加BLL.tt文件: T4Model添加Model文件: T4DAL添加DAL.tt文件: T4DAL 添加ADO.NET En ...
最新文章
- Flutter开发之数据存储-3-数据库存储(34)
- OOB套接字传输实例(达不到预期结果)
- (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节5:假脱机(SPOOLing)技术
- vue_axios请求封装、异常拦截统一处理
- 计算机硬件技术基础第四章ppt,管理N计算机硬件技术基础第4章.ppt
- java中int算法的有趣现象
- 五月康乃馨,爱心献父母---母亲节快乐
- python从列表某位置开始读取_python如何读取列表中元素的位置?
- java获取jsp页面下拉列表框_jQuery+jsp下拉框联动获取本地数据的方法(附源码)
- macbook 安装iperf_三分钟学会iperf3的使用
- 关于flymcu烧录stm32芯片超时的问题解决
- springboot+vue网络课程教学网站系统java源码介绍
- 中标麒麟系统u盘安装_怎么从u盘启动安装中标麒麟操作系统
- 运行matlab报错 Runtime Error
- WAIC | 奇点云携「酷炫AI应用」亮相2019世界人工智能大会
- Linux系统U盘怎么格式化,Linux下对U盘的分区与格式化
- 马云关于计算机的名人名言,马云名人名言
- Django 解决CSRF 跨域问题总结
- 台式计算机usb口不识别鼠标,如何解决插入鼠标提示无法识别USB设备的问题
- Softer-NMS 论文笔记
热门文章
- 用Windows Live Writer写51cto博客
- Android 轻松实现语音朗读
- h3c等价路由(rip)
- java mybatis 事务,单独的使用mybatis 如何来管理事务
- h264解码延迟优化_OPPO Enco Free真无线双发耳机提速120ms,延迟优于苹果华为
- VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multi
- readhat7mysql_Redhat7.3安装MySQL8.0.22的详细教程(二进制安装)
- 【渝粤题库】国家开放大学2021春2737市场调查与商情预测题目
- stdlib.h函数请单
- 【转】XP系统电脑开机自动登陆系统