T4模板之文本模板
这个博主写的很良心了:https://www.cnblogs.com/lzrabbit/archive/2012/07/15/2591085.html
T4模板在平时我们其实都会或多或少的遇到。最多的用在实体与数据库的映射上面。
这里只记录一下他的语法。
需要的插件:vs2017
T4代码高亮插件:Devart T4 Editor
T4生成多文件:T4 Toolbox (使用这个可以很好的生成我们的实体映射,这篇不会使用到)
①我们需要创建一个文本模板,运行时文本模板我们不用管
查看这个*.tt文件属性
文本模板由以下部分组成:
-
指令 - 控制模板处理方式的元素。
-
文本块 - 直接复制到输出的内容。
-
控制块 - 将变量值插入文本的程序代码,并控制文本的条件或重复部分。
①T4指令
1.模板指令
<#@ template [language="C#"] [compilerOptions="options"] [culture="code"] [debug="true"] [hostspecific="true"] [inherits="templateBaseClass"] [visibility="internal"] [linePragmas="false"] #>
2.参数指令
<#@ parameter type="Full.TypeName" name="ParameterName" #>
3.输出指令
<#@ output extension=".fileNameExtension" [encoding="encoding"] #>
4.Assembly指令==代码中引用程序集
<#@ assembly name="[assembly strong name|assembly file name]" #>
5.导入指令==代码中的using 命名空间
<#@ import namespace="namespace" #>
6.包含指令(可以把相同的文件单独写个然后进行包含指令)
<#@ include file="filePath" [once="true"] #>
③控制块
-
<# Standard control blocks #>
可以包含语句。 -
<#= Expression control blocks #>
可以包含表达式。 -
<#+ Class feature control blocks #>
可以包含方法,字段和属性。
④转义字符
\<# ... \#>
下面是简单的了解下
①输出.txt文本
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".txt" #> Hello Word
②使用循环输出多行文本
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".txt" #>
<# // 注意你的空格,(注释) #>
<#for(int i=0;i<4;i++){#>
Hello Word
<#}#>
③自定义方法进行调用
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".txt" #> <# // 注意你的空格 #> <#for(int i=0;i<4;i++){#> Hello Word i前:<#=i #> ,i后:<#= TestFu(i) #> <#}#> <#+ //可以写我们的自定义的方法 private int TestFu(int n) { return n+1; } #>
④输出.cs文件
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> namespace T4Demo { public class T4Test { /// <summary> /// ID /// </summary> public int ID { get; set;} /// <summary> /// 姓名 /// </summary> public string Name { get; set;} } }
⑤添加引用
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> namespace T4Demo { using System; public class T4Test { /// <summary> /// ID /// </summary> public int ID { get; set;} /// <summary> /// 姓名 /// </summary> public string Name { get; set;} /// <summary> /// 出生日期 /// </summary> public DateTime? Birth { get; set;} } }
⑥转义字符
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-03-19 Task及Mvc的异步控制器 使用探索
2018-03-19 创建在“system.net/defaultProxy”配置节中指定的Web代理时出错解决办法。
2016-03-19 使用NuGet安装EntityFramework4.2
2016-03-19 初识NuGet - 概念, 安装和使用
2016-03-19 Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
2015-03-19 C# 操作 Word 修改word的高级属性中的自定义属性2
2015-03-19 CLR C++ Set Word CustomDocumentProperties