Записать сгенерированный код T4 в отдельные выходные файлы - PullRequest
0 голосов
/ 22 марта 2019

Я создаю .tt файл, который на практике преобразует текст в классы моделей.

Создается файл .cs со всеми models, но я бы хотел, чтобы каждый model был сохранен в своем собственном файле .cs в другой папке.

Каков наилучший подход для достижения этой цели?

1 Ответ

1 голос
/ 23 марта 2019

Вот простой пример того, как вы можете вывести несколько файлов из одного шаблона T4.

Использование выходных файлов SaveOutput -метода ( Content1.txt, Content2.txt ..) создается в той же папке, что и .tt-файл, а 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);
}
#>
...