T4模板之文本模板

网址:https://docs.microsoft.com/en-us/visualstudio/modeling/design-time-code-generation-by-using-t4-text-templates?view=vs-2017

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;}
    }
}

⑥转义字符

原文地址:https://www.cnblogs.com/Sea1ee/p/10269697.html

时间: 2024-11-10 22:56:20

T4模板之文本模板的相关文章

T4文本模板转换过程

T4文本模板转换过程将文本模板文件作为输入,生成一个新的文本文件作为输出. 例如,可以使用文本模板生成 Visual Basic 或 C# 代码,还可以生成 HTML 报告. 有三个组件参与这一过程:引擎.宿主和指令处理器. 引擎对该过程进行控制(引擎与宿主和指令处理器交互),以生成输出文件:宿主提供与环境的所有交互(如定位文件和程序集); 指令处理器为文本模板添加功能(如从 XML 文件或数据库读取数据等). 组件: 组件 说明 可自定义(是/否) 引擎 引擎组件控制文本模板转换过程. 否 主

C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就看看如何用它来实现批量修改实体框架(Entity Framework)中的类名.我们都知道ADO.NET 实体数据模型中有一种方式是以数据库模型来生成数据模型的,这是个很简便的实体数据模型生成的方式,但是因为微软提供的自定义接口不足,我们无法实现对生成的数据模型实体类批量进行修改(至少我上网找了很久

一个简单的代码生成器(T4文本模板运用)

说要写这篇文章有一段时间了,但因为最近各方面的压力导致心情十二分的不好,下班后往往都洗洗睡了.今天痛定思痛,终于把这件拖了很久的事做了.好,不废话了,现在看看"一个简单的代码生成器" . 先看看界面吧! 简约到如此,说是代码生成器,估计是要被吐槽的.好吧,借用园子里博友的说法,这只是一粒粟子,如果你愿意,你能看到代码生成器的"种子". 这样运行的! 画了个简图已描述这个简单的代码生成器的工作过程.下面的介绍将以此图展开: 1)读取数据表的信息:从数据库中读取数据表的

编写 T4 文本模板

文本模板由以下部件组成: 1)指令 - 控制模板处理方式的元素. 2)文本块 - 直接复制到输出的内容. 3)控制块 - 向文本插入可变值并控制文本的条件或重复部件的程序代码. 指令: 指令是控制模板处理方式的元素,为模板转换引擎提供说明. T4文本模板指令包括:    T4模板指令:  T4参数指令:  T4输出指令:  T4程序集指令:  T4导入指令:  T4包含指令:  T4 CleanUpBehavior 指令及其自定义指令. 指令的语法如下所示: <#@ DirectiveName

T4文本模板

<#...#> 可以包含语句 <#=...#>  用于表达式,提供“输出”操作 <#+ ...> 使用类功能控制块向文本模板添加方法.属性.字段,必须作为文件中最后一个块显示 assembly 指令使指定的程序集可供模板代码使用,方式与 Visual Studio 项目中的“引用”部分相同. 您无需包括对 System.dll 的引用,它是自动引用的. import 指令允许您使用类型而不使用其完全限定名,方式与普通程序文件中的 using 指令相同 若要从相对于文本模

关于C#中文本模板(.tt)的简单应用

转自http://www.it165.net/pro/html/201409/21789.html 这两天做项目突遇 .tt文件,之前没有接触过,so查询学习做笔记,帮助记忆和后来者. 在项目添加中点击选择文本模板 下面贴出代码,做了简单的注释 01.<#@ template debug="false" hostspecific="false" language="C#" #> 02.<#@ assembly name=&quo

JSON、文本模板、HTML模板

JSON JSON是一种发送和接收格式化信息的标准.JSON不是唯一的标准,XML.ASN.1 和 Google 的 Protocol Buffer 都是相似的标准.Go通过标准库 encoding/json.encoding/xml.encoding/asn1 和其他的库对这些格式的编码和解码提供了非常好的支持,这些库都拥有相同的API. 序列化输出 首先定义一组数据: type Movie struct { Title string Year int `json:"released"

C++解析(26):函数模板与类模板

0.目录 1.函数模板 1.1 函数模板与泛型编程 1.2 多参数函数模板 1.3 函数重载遇上函数模板 2.类模板 2.1 类模板 2.2 多参数类模板与特化 2.3 特化的深度分析 3.小结 1.函数模板 1.1 函数模板与泛型编程 C++中有几种交换变量的方法? 交换变量的方法--定义宏代码块 vs 定义函数: 定义宏代码块 优点:代码复用,适合所有的类型 缺点:编译器不知道宏的存在,缺少类型检查 定义函数 优点:真正的函数调用,编译器对类型进行检查 缺点:根据类型重复定义函数,无法代码复

Cacti 模板(图形模板、数据模板、主机模板)与自定义监控脚本

Cacti定义了三种类型的模板,分别是 主机模板 数据模板 图形模板     主机模板(Host templates),它是图像模板和数据查询的一个集合,描述了监控某一类型的机器需要生成那些图像. 数据模板(Data templates),它描述了 Cacti 存储哪些数据到指定类型的 RRD 文件.该模板与 RRDTool 工具的 create 命令相关. 图形模板(Graph templates),描述了生成的一张图像应该是什么样子的.包括使用哪些数据模板.展示哪些元素.是否使用 CDEF