我想使用另一个t4模板来输入而不是this.WriteLine(“Hello,World!”);那可能吗?
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="txt" #>
<#@ include file="T4Toolbox.tt" #>
Sample Content
<# for(int i=7;i<9;i++){
SampleTemplate template = new SampleTemplate();
template.Output.File = @"SubFolder\SampleOutput"+i+".txt";
template.Output.Project = @"..\ClassLibrary2\ClassLibrary2.csproj";
template.Render();
}
#>
<#+
public class SampleTemplate : Template
{
public override string TransformText()
{
this.WriteLine("Hello, World!");
return this.GenerationEnvironment.ToString();
}
}
#>
答案 0 :(得分:0)
是。这篇文章描述了如何:
http://www.olegsych.com/2008/09/t4-tutorial-creating-reusable-code-generation-templates/
答案 1 :(得分:0)
使用T4函数将当前模板输出重定向到您指定的文件-将其另存为SaveOutput.tt:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#
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);
}
#>
在生成输出代码时,请调用函数:
<#@ include file="SaveOutput.tt" #>
<#
GenerateFile1();
SaveOutput("File1.txt");
GenerateFile2();
SaveOutput("File2.txt");
#>
<#
void GenerateFile1()
{
#>
This is file 1
<#
}
void GenerateFile2()
{
#>
This is file 2
<#+
}
#>
注意:我从Oleg Sych的博客中获取了这段代码,因为他在他的博客上发布了一个已死的链接,其中显示了解决该问题所需的步骤。由于SO不喜欢仅链接的答案,因此我从该博客文章中重新发布了相关代码。您可以找到his blogpost on the wayback machine here的副本。唯一的区别是,在每个T4代码块启动后,我都删除了“ +”字符-似乎没有必要。