T4模板多输出

时间:2013-03-11 08:25:25

标签: c# t4

我想使用另一个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();
        }
    }
#>

2 个答案:

答案 0 :(得分:0)

答案 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代码块启动后,我都删除了“ +”字符-似乎没有必要。