将T4生成的代码编写为单独的输出文件

时间:2019-03-22 09:29:18

标签: c# .net templates transformation t4

我正在创建一个.tt文件,该文件将文本转换为模型类以进行练习。

生成了一个.cs文件,其中包含所有models,但是我希望每个model都保存在自己的.cs文件中的另一个文件夹中。

实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个简单的示例,说明如何从单个T4模板输出多个文件。

使用SaveOutput方法输出文件( Content1.txt,Content2.txt ..)与.tt-file创建到同一文件夹,其中SaveOutputToSubFolder输出文件转到单独的文件夹( 1 \ Content1.txt,2 \ Content2.txt ..)

<#@ 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 < 10; ++i) {
#>
File Content <#= i #>
<#

  SaveOutput("Content" + i.ToString() + ".txt");
  //Uncomment following to write to separate folder 1,2,3
  //SaveOutputToSubFolder(i.ToString(),"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);
}
private void SaveOutputToSubFolder(string folderName, string outputFileName) {
  string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
  string newDirectoryName = Path.Combine(templateDirectory,folderName);
  if(!Directory.Exists(newDirectoryName))
    Directory.CreateDirectory(newDirectoryName);
  string outputFilePath = Path.Combine(newDirectoryName, outputFileName);
  File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString()); 
  this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
}
#>