T4模板之文本模板

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

这个博主写的很良心了: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;}
    }
}

 

 

 

⑥转义字符

 

 

posted @ 2019-01-14 23:36  Sealee  阅读(1631)  评论(0编辑  收藏  举报