T4模板使用(一):认识模板及简单使用

T4模板使用(一):认识模板

前言

t4模板是vs里用于生成代码的一个模板工具,可以对模板编写达到一键生成自己想要代码的目的。
首先,先看一下T4模板的简介。

简介

文本模板包含将从其生成的文本。 例如,用于创建网页的模板将包含 " …"以及 HTML 页的所有其他标准部分。 插入到模板中的是 控制块,它们是程序代码的片段。 控制块提供变化值,允许文本部件是条件和重复的。
使用这一结构很容易开发模板,因为可以以生成文件为原型,然后逐步插入用于改变结果的控制块。
文本模板由以下部件组成:

  1. 指令 -控制如何处理模板的元素。
  2. 文本块 -直接复制到输出的内容。
  3. 控制块 -将变量值插入到文本中并控制文本的有条件或重复部分的程序代码。

然后,我们看一下流程。

流程

1.选择t4模板存放目录
在这里插入图片描述
右键 ->添加 ->新建项
或者 ctrl +shift +A
选择文本模板
在这里插入图片描述
创建完成
在这里插入图片描述

模板内容

内容

这里包含了几个默认项目

  1. Template 指令:<#@ template debug=“false” hostspecific=“false” language=“C#” #>
    里面包含了几个参数:

    1. debug:没啥用,会导致vs卡死,如果想要调试模板,在模板文件右键,选择t4模板调试。
    2. hostspecific:可以获取Host内容,需要获取解决方案信息的时候,需要将其设置为true。
    3. language:声明脚本使用的语言。
      非自带参数:
    4. compilerOptions :编译器选项(我没用过)有效值是任何有效编译器选项
    5. culture :表示为 xx-XX 形式字符串的区域性。 例如:en-US、ja-JP、de-CH、de-DE。 有关详细信息,请参阅 System.Globalization.CultureInfo
    6. inherits :可以指定模板继承自另一个类
    7. linePragmas :调试用,将此特性设置为 false 将移除标识你在生成代码中的行号的标记。 这意味着,编译器将通过使用生成代码的行号来报告所有错误。这将为你提供更多调试选项,如你可选择调试文本模板或生成代码。(没用过)
    8. visibility :可见性

    Template 指令不是必须,可以没有

  2. 程序集指令<#@ assembly name=“System.Core” #>
    表示使用的程序集。

  3. 导入指令<#@ import namespace=“System.Linq” #>
    相当于using

  4. 输出指令<#@ output extension=".txt" #>
    表示输出文件后缀

还有一些未包含的如

  1. 参数指令:<#@ parameter type=“Full.TypeName” name=“ParameterName” #>
    示例:<#@ parameter type=“System.Int32” name=“TimesToRepeat” #>
    			<# for (int i = 0; i < TimesToRepeat; i++) { #>
    			Line <#= i #>
    			<# } #>
    
    可以声明所用参数
  2. 包含指令:<#@ include file=“filePath” [once=“true”] #>
    可以应用其他的文件(我只引用了t4文件,其他请自行尝试)
  3. CleanUpBehavior 指令 若要在处理文本模板之后删除 appDomain,请包括以下行:<#@ CleanupBehavior processor=“T4VSHost” CleanupAfterProcessingtemplate=“true” #>(我没用到)

语法

模板的语法基本就是<#(内容) #>,代码的语法看使用的language,我这里使用的c#便用的是c#的语法。c#的类都可以使用,前提是要在指令中进行引用。
赋值使用的是<#= (变量)#>

打印内容

<# #>以外的内容都是打印内容
也就是说,你可以直接将你的模板类,复制粘贴过来,加上指令头,然后用<# #>和<#= #>修改其中的变量就可以了
下面写一个简单例子方便理解

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
//要实现的类
<#
	//我想定义个变量
	var imvar = "我是变量";
#>
public class test{
	public string <#=imvar#> { get; set; }
}

这样就会生成
在这里插入图片描述
你在<# #>中定义的变量就可以用<#= #>进行值得替换。
假如需要循环,可以这么写

<#
	var list = new List<string>();
	list.Add("一号"),
	list.Add("二号")
	foreach(var i in list){
#>
	public string <#=i#>
<#	
	}
#>

这里就是把循环里的括号拆开,添加进去模板值,虽然看起来很难看,但是很好理解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值