T4工具箱 - 混合类功能和语句块

Mau*_*fer 11 .net t4 t4-toolbox

我是一个T4新手试图使用T4工具箱根据这个答案生成F#代码,但似乎类功能块不能与语句块混合使用.这是我的代码:

<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="txt" #>
<#@ include file="T4Toolbox.tt" #>
<#
    FSharpTemplate template = new FSharpTemplate();
    template.Output.Project = @"..\Library1\Library1.fsproj";
    template.Output.File = "Module2.fs";
    template.Render();
#>
<#+
class FSharpTemplate: Template
{
    public override string TransformText()
    {
#>

module Module2

<# for (int i = 0; i < 10; i++) { #>
<#= i #>
<# } #>

<#+
        return this.GenerationEnvironment.ToString();
    }
}

#>
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

在模板中的第一个类功能之后,语句无法显示.在第一个类功能块之后,只允许使用样板,表达式和其他类功能.

那么......我怎样才能重写模板来实现这个目标呢?

Gar*_*thJ 11

在第一个类功能块之后,您需要使所有后续语句块也成为类功能块.

在封面下,第一类特征块终止幕后"生成"方法,并切换到将内容作为模板的幕后类成员插入.

如果您使用的是Visual Studio 2010,则可以随时创建预处理模板并将常规模板代码粘贴到该模板中,以查看幕后发生的情况.


Oli*_*bes 6

@GarethJ的答案解释了为什么会发生这种情况,但并没有告诉您如何解决。您需要添加一个加号,即使用<#+而不是<#

<#+ for (int i = 0; i < 10; i++) { #>
<#= i #>
<#+ } #>
Run Code Online (Sandbox Code Playgroud)


eri*_*len 5

您应该在任何输出下方的同一功能块中具有所有类功能.