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

如何通过代码获取T4模板输出文件的完整名称

T4模板获取输出扩展名的解决方案

这里直接给两种可落地的方案:

方案1:硬关联定义(最简单推荐)

直接在模板内同步定义输出扩展名,同时用于output指令和业务逻辑,完全不需要调用额外API:

<#@ output extension=".cs" #>
<#
// 同步定义和output指令一致的扩展名
const string OutputExtension = ".cs";
// 拼接生成的完整文件名
string outputFileName = Path.ChangeExtension(Path.GetFileName(Host.TemplateFile), OutputExtension);
#>

这个方案的优势是逻辑简单无依赖,改扩展名的时候只要同步改两处就行,适合绝大多数场景。

方案2:动态解析模板的output指令(无重复定义)

如果不想重复维护扩展名,可以直接读取当前T4模板文件的内容,用正则匹配提取output指令里的扩展名:

<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#
// 读取当前模板文件的所有内容
string templateContent = File.ReadAllText(Host.TemplateFile);
// 正则匹配output指令的extension属性
Match extMatch = Regex.Match(templateContent, @"<#@\s*output.*extension\s*=\s*""(?<ext>[^""]+)""", RegexOptions.IgnoreCase);
string outputExtension = extMatch.Success ? extMatch.Groups["ext"].Value : ".cs";
// 拼接完整文件名
string outputFileName = Path.ChangeExtension(Path.GetFileName(Host.TemplateFile), outputExtension);
#>

这个方案可以做到只修改output指令一处就同步生效,适合模板需要频繁切换输出扩展名的场景。

补充说明

如果你的模板运行环境支持访问VS的DTE对象,也可以通过DTE接口获取当前TT文件对应生成项的文件名,不过需要额外引用EnvDTE程序集,复杂度更高,一般前两种方案就可以覆盖99%的使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:45:06