You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否可基于现有类自动生成T4模板(.tt)文件?

可行性结论

完全可以基于已编写完成的C#类自动生成带自定义变量的T4模板,不需要从零手写模板内容,即使是结构复杂的类也能通过自动化工具完成模板生成,效率远高于手动编写。

具体实现步骤
  • 标记可变点位
    先梳理现有类中所有需要动态替换的内容(比如示例中的类名后缀A、常量字符串中的A),如果可变点位规则统一,可以直接用正则批量匹配替换为临时占位符;如果类结构复杂、可变点位分散且规则不统一,直接用Roslyn解析C#语法树,精准定位类名、构造函数名、常量值、属性名等需要参数化的语法节点,避免正则误替换注释、无关字符串中的同名内容。
    以你给出的示例类为例,替换临时占位符后的内容如下:
public class Class{{ClassNameSuffix}}
{
    private const string MyField = "Test-{{ClassNameSuffix}}";

    public Class{{ClassNameSuffix}}()
    {

    }
}
  • 自动生成T4模板基础结构
    写一个极简的转换工具,自动完成以下逻辑,不需要手动编辑模板框架:
    1. 读取替换完占位符的类内容
    2. 自动拼接T4模板的标准头部声明,包括模板语言配置、输出文件格式配置、自定义参数声明
    3. 将所有临时占位符替换为T4的参数输出标记<#= 参数名 #>
      生成的基础T4模板内容如下:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ parameter name="ClassNameSuffix" type="System.String" #>
public class Class<#= ClassNameSuffix #>
{
    private const string MyField = "Test-<#= ClassNameSuffix #>";

    public Class<#= ClassNameSuffix #>()
    {

    }
}

后续只需要给ClassNameSuffix参数传入不同的值(B/C/D等),就能自动生成对应的ClassB、ClassC、ClassD类。

  • 批量生成适配
    如果需要一次性生成多个变体类,不需要逐个传参执行模板,直接在T4模板中加入循环逻辑,传入待生成的标识列表即可批量输出,示例如下:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<# 
    // 可自行修改需要生成的类标识列表
    var classIdentifiers = new [] {"B", "C", "D"};
#>
<# foreach(var id in classIdentifiers) { #>
public class Class<#= id #>
{
    private const string MyField = "Test-<#= id #>";

    public Class<#= id #>()
    {

    }
}
<# } #>
高复杂度类适配提示

对于结构复杂的业务类,不要用纯正则做替换,优先用Roslyn做语法树解析:你可以自定义解析规则,比如只替换public类名、特定前缀的常量、标记了自定义特性的属性,自动跳过不需要修改的逻辑代码、注释、私有方法等内容,生成模板的准确率能达到100%,后续类逻辑更新后只需要重新跑一次转换工具就能同步更新T4模板,完全不需要手动维护模板内容。

内容的提问来源于stack exchange,提问作者Odrai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.17 16:16:01