T4模板生成的文件未嵌套在.tt文件

时间:2019-01-23 04:26:12

标签: templates .net-core nested t4 auto-generate

由于我想使用T4模板生成多个文件,因此我已将T4模板文件添加到类库(.NET Core)项目(.net Core 2.1)中。

enter image description here

我在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个文本文件。

enter image description here

但是,从模板创建的文件不会嵌套到“ Generated.Files.tt”文件中。我们如何将这些文件嵌套在“ Generated.Files.tt”下,所以如果我扩展tt文件,我想查看生成的文件。

1 个答案:

答案 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是具有一些解释的基本教程。