Файлы, созданные с помощью шаблона T4, не вложены в файл .tt - PullRequest
0 голосов
/ 23 января 2019

Поскольку я хотел создать несколько файлов с использованием шаблонов 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 голосов
/ 08 мая 2019

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); приведет к тому, что шаблон сгенерирует дочерний узел, но вы все равно будете сами записывать файлы.

Здесь - базовое руководство с некоторыми пояснениями.

...