T4模板之文本模板

Posted sea1ee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;}
    }
}

 

技术分享图片

 

 

⑥转义字符

 技术分享图片

技术分享图片

 

以上是关于T4模板之文本模板的主要内容,如果未能解决你的问题,请参考以下文章

T4模板之文本模板

T4模板:T4模板之基础篇

T4模板之基础篇

T4模板之基础篇

“)预期”在 c# 中使用 t4 文本模板

T4模板简单了解