控制由T4模板生成的文件名?

13
如何指示 T4 模板使用给定的文件名生成结果文件?
我会更加清晰地解释。假设我有一个名为 Insert.tt 的模板,用于生成将记录插入表中的代码。它的输出扩展名为 "sql",因此它创建了一个名为:
Insert.sql
这没问题,但我希望文件名反映我正在尝试执行的操作。假设我要为其生成插入语句的表的名称存储在 <#= TableName #> 中。我想将其传递给模板生成器,并让它使用它来保存生成的文件。
例如:<# SaveTemplateAs("Insert" + TableName); #> 所以假设我为 User、Address 和 Phone 表生成插入语句。
我希望生成的文件名分别为 InsertUser.sql、InsertAddress.sql 和 InsertPhone.sql。
我相当确定这可以实现,因为我已经看到一些自定义扩展可以从单个模板生成多个文件,但我不明白如何简单(不过度)地实现它。
谢谢
2个回答

23

很遗憾,似乎无法在.tt文件中实现。但是您可以在包含文本模板的项目的.csproj文件中控制输出文件名。从Visual Studio解决方案中卸载该项目,然后直接在文本编辑器中打开项目文件,例如.csproj

在那里,您会找到模板文件的引用。

节点<LastGenOutput>控制输出文件名。在这里,您可以选择所需的文件名。


无需卸载项目,VS会在手动编辑后保存时检测到更改。 - MonkeyPushButton
@MonkeyPushButton 我认为在VS处于活动状态时同时编辑它可能会有些危险,这就是为什么只有在先卸载项目后才能使用“编辑abc.csproj”选项的原因。 - Dave Cousineau
1
这在我使用VS2019和运行时模板时无法工作。每次重新生成时它都会改回名称。 - Jeff Walker Code Ranger
有趣的是,VS有时会更改csproj文件中输出后缀为数字(可能检测到重复或其他原因),因此这也是解决该问题的方法。 - General Grievance

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接