13

私はT4Toolboxを使用してこの回答に基づいてF#コードを生成しようとしているT4初心者ですがクラス機能ブロックをステートメントブロックと混合することはできないようです。これが私のコードです:

<#@ 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

最初のクラスの機能ブロックの後、後続のすべてのステートメントブロックもクラスの機能ブロックにする必要があります。

裏で、ファーストクラスの機能ブロックは舞台裏の「Generate」メソッドを終了し、テンプレートの舞台裏のクラスのメンバーとしてコンテンツを挿入するように切り替えます。

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 に答える