T4 Toolbox - смешивание классов объектов и блоков операторов - PullRequest
11 голосов
/ 18 апреля 2010

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

#>

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

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

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

Ответы [ 3 ]

11 голосов
/ 02 мая 2010

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

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

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

5 голосов
/ 18 апреля 2010

Вы должны иметь все функции класса в одном и том же блоке объектов ниже любого вывода.

3 голосов
/ 13 февраля 2018

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

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