由于我想使用T4模板生成多个文件,因此我已将T4模板文件添加到类库(.NET Core)项目(.net Core 2.1)中。
我在T4模板中添加了以下代码。
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#
for (Int32 i = 0; i < 5; ++i) {
#>
Content <#= i #>
<#
// End of file.
SaveOutput("Content" + i.ToString() + ".txt");
}
#>
<#+
private void SaveOutput(string outputFileName) {
string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
string outputFilePath = Path.Combine(templateDirectory, outputFileName);
File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString());
this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
}
#>
按预期,这创建了5个文本文件。
但是,从模板创建的文件不会嵌套到“ Generated.Files.tt”文件中。我们如何将这些文件嵌套在“ Generated.Files.tt”下,所以如果我扩展tt文件,我想查看生成的文件。
答案 0 :(得分:0)
this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
是将输出删除到子节点的方法。在该模板中,手动创建文件,然后在您的SaveOutput方法中将输出写入其中。
只需删除该方法,输出将在子节点中自动生成。
示例:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#
for (Int32 i = 0; i < 5; ++i) {
#>
Content <#= i #>
<#
}
#>
仅删除this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
会导致模板生成一个子节点,但是那时您仍在自己写文件。
Here是具有一些解释的基本教程。