T4 Toolbox - функция класса смешения и блоки операторов

Я новичок 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();
    }
}

#>

И я получаю эту ошибку:

Заявление не может появиться после функция первого класса в шаблоне. Только шаблоны, выражения и другие функции класса разрешены после блок функций первого класса.

Итак... как я могу переписать шаблон для достижения этого?

Ответ 1

После первого функционального блока класса вам необходимо сделать все последующие блоки операторов также блоками функций класса.

Под обложками блок функций первого класса завершает метод "Создать" за кулисами и переключается на вставку содержимого в качестве элементов шаблона за кулисами.

Если вы используете Visual Studio 2010, вы всегда можете создать предварительно обработанный шаблон и вставить свой обычный шаблон кода в это, чтобы посмотреть, что происходит под капотом.

Ответ 2

У вас должны быть все функции класса в одном и том же блоке функций, ниже любого выхода.

Ответ 3

В то время как ответ @GarethJ объясняет, почему это происходит, он не говорит вам об этом. Вам нужно добавить знак "плюс", т.е. Использовать "< # +" вместо "< #"

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