2010-04-17 2 views
11

Я новичок T4, пытающийся использовать T4 Toolbox для генерации кода F # на основе this answer, но кажется, что функциональные блоки классов нельзя смешивать с блоками операторов. Вот мой код:T4 Toolbox - функции смешения класса и блоки операторов

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

#> 

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

A Statement cannot appear after the first class feature in the template. Only boilerplate, expressions and other class features are allowed after the first class feature block.

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

ответ

11

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

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

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

5

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

+0

Если я что я не получаю никакого вывода на всех –

+0

я вижу. Я действительно не понимаю, как должен был отвечать ответ в другом вопросе, но я могу сказать вам, что это правило для T4. Я бы рекомендовал добавить ссылку на сгенерированный файл в другом проекте. – erikkallen

0

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

<#+ for (int i = 0; i < 10; i++) { #> 
<#= i #> 
<#+ } #> 
Смежные вопросы