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();
    }
}

#>

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

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

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


person Mauricio Scheffer    schedule 17.04.2010    source источник


Ответы (3)


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

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

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

person GarethJ    schedule 01.05.2010

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

<#+ for (int i = 0; i < 10; i++) { #>
<#= i #>
<#+ } #>
person Olivier Jacot-Descombes    schedule 13.02.2018

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

person erikkallen    schedule 17.04.2010
comment
Если я это сделаю, я не получу никакого результата - person Mauricio Scheffer; 20.04.2010
comment
Я понимаю. Я действительно не понимаю, как должен был работать ответ в другом вопросе, но я могу сказать вам, что это правило для T4. Я бы рекомендовал добавить ссылку на сгенерированный файл в другом проекте. - person erikkallen; 20.04.2010