首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2020-3-3-使用T4模板进行C#代码生成

2020-3-3-使用T4模板进行C#代码生成

作者头像
黄腾霄
发布2020-06-10 15:15:32
2.6K0
发布2020-06-10 15:15:32
举报

有过前端开发经验的同学一定了解模板文件的重要用户。其实C#也有类似的模板功能(T4模板),不仅可以生成html文件,还可以生成代码。今天就给大家介绍一下。


什么是T4模板

T4模板全称是Text Template Transformation Toolkit,因为四个单词的开头字母都是T,所以称作T4模板。

T4模板是一种支持C#或者VB代码开发的模板格式,已经在Visual Studio,MonoDevelop,Rider这些主流IDE中得到支持。

T4不仅能支持在运行时动态生成Html网页这种常见需求,而且还可以在设计时生成各种语言的代码(不仅仅是C#),xaml,xml等以便于提升开发效率。

使用visualstudio创建一个T4模板

我们在项目上右键选择添加新项,在弹出的界面中搜索T4,可以得到两个结果。分别是文本模板(设计时T4模板)和运行时文本模板(运行时T4模板)。前者可以在开发时期或者编译时期生成,后者只能在运行时调用API生成。这里我们先选择文本模板。

image-20200303192301497
image-20200303192301497

这时我们在项目内就多了一个后缀为tt的模板文件。

image-20200303193021735
image-20200303193021735

我们把下面这段内容粘贴进去。注意如果是第一次使用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文件,其中的代码就是我们刚刚粘贴的内容。

image-20200303193447359
image-20200303193447359

更重要的是,生成的代码就在这个项目中,可以直接使用。

image-20200303193634749
image-20200303193634749

使用代码辅助生成

光是生成静态文件肯定没啥意思,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 = ; i < ; i++)
            {
#>
            Console.WriteLine("黄腾霄好帅+<#=i+1#>!");
<#
            }
#>
        }
    }
}

这里所有被<# #>包围的代码是模板编译时会执行的代码。

这里的代码表示将Console.WriteLine("黄腾霄好帅+<#=i+1#>!");在生成文件中输出5次。

其中<#=i+1#>表示将表达式i+1的值转为字符串填充至模板的生成文件中。

结果如下

image-20200303195114635
image-20200303195114635

值得注意的是,这里的i+1输出随着循环进行而更新。这说明所在的模板中的代码块都隶属于同一个上下文。

可以实现变量的传递。

More

至此相信你已经可以使用T4模板完成基本的代码生成功能开发了。当然本文作为入门介绍还有很多细节没有介绍。这里可以在微软的官方文档中找到更加详细的介绍:Writing a T4 Text Template - Visual Studio -Microsoft Docs

当然也可以关注我之后关于T4模板的系列博客。


参考文档:


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/%E4%BD%BF%E7%94%A8T4%E6%A8%A1%E6%9D%BF%E8%BF%9B%E8%A1%8CC-%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是T4模板
  • 使用visualstudio创建一个T4模板
  • 使用代码辅助生成
  • More
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档