有过前端开发经验的同学一定了解模板文件的重要用户。其实C#也有类似的模板功能(T4模板),不仅可以生成html文件,还可以生成代码。今天就给大家介绍一下。
T4模板全称是Text Template Transformation Toolkit
,因为四个单词的开头字母都是T,所以称作T4模板。
T4模板是一种支持C#或者VB代码开发的模板格式,已经在Visual Studio,MonoDevelop,Rider这些主流IDE中得到支持。
T4不仅能支持在运行时动态生成Html网页这种常见需求,而且还可以在设计时生成各种语言的代码(不仅仅是C#),xaml,xml等以便于提升开发效率。
我们在项目上右键选择添加新项,在弹出的界面中搜索T4,可以得到两个结果。分别是文本模板(设计时T4模板)和运行时文本模板(运行时T4模板)。前者可以在开发时期或者编译时期生成,后者只能在运行时调用API生成。这里我们先选择文本模板。
这时我们在项目内就多了一个后缀为tt的模板文件。
我们把下面这段内容粘贴进去。注意如果是第一次使用vs可能会弹出一个提示框,选择确认即可。
<#@ 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" #>
//这个是生成代码
using System;
namespace ConsoleApp2
{
public class GeneratedClass
{
static void Print()
{
Console.WriteLine("黄腾霄好帅!");
}
}
}
此时我们会发现多了一个同名的.cs文件,其中的代码就是我们刚刚粘贴的内容。
更重要的是,生成的代码就在这个项目中,可以直接使用。
光是生成静态文件肯定没啥意思,T4可以使用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" #>
//这个是生成代码
using System;
namespace ConsoleApp2
{
class GeneratedClass
{
public static void Print()
{
<#
for (int i = 0; i < 5; i++)
{
#>
Console.WriteLine("黄腾霄好帅+<#=i+1#>!");
<#
}
#>
}
}
}
这里所有被<# #>包围的代码是模板编译时会执行的代码。
这里的代码表示将Console.WriteLine("黄腾霄好帅+<#=i+1#>!");
在生成文件中输出5次。
其中<#=i+1#>表示将表达式i+1的值转为字符串填充至模板的生成文件中。
结果如下
值得注意的是,这里的i+1输出随着循环进行而更新。这说明所在的模板中的代码块都隶属于同一个上下文。
可以实现变量的传递。
至此相信你已经可以使用T4模板完成基本的代码生成功能开发了。当然本文作为入门介绍还有很多细节没有介绍。这里可以在微软的官方文档中找到更加详细的介绍:Writing a T4 Text Template - Visual Studio -Microsoft Docs
当然也可以关注我之后关于T4模板的系列博客。
参考文档:
本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。