13

我是一个 T4 新手,试图使用T4 Toolbox根据这个答案生成 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();
    }
}

#>

我得到这个错误:

声明不能出现在模板中的第一类特征之后。在第一类特征块之后只允许样板、表达式和其他类特征。

那么......我怎样才能重写模板来实现这一点?

4

3 回答 3

10

在第一个类特征块之后,您需要使所有后续语句块也类特征块。

在幕后,第一个类功能块终止了幕后“生成”方法,并切换到插入内容作为模板的幕后类的成员。

如果您使用的是 Visual Studio 2010,您始终可以创建一个预处理模板并将您的常规模板代码粘贴到该模板中,以查看幕后情况。

于 2010-05-01T20:38:05.207 回答
7

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

<#+ for (int i = 0; i < 10; i++) { #>
<#= i #>
<#+ } #>
于 2018-02-13T17:22:42.663 回答
4

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

于 2010-04-17T21:52:12.093 回答