2010-04-17 7 views
11

Ich bin ein T4 Neuling versucht T4 Toolbox zu verwenden, um F # Code basierend auf this answer zu generieren, aber es scheint, dass Klasse Feature-Blöcke nicht mit Anweisungsblöcke gemischt werden können. Hier ist mein Code:T4 Toolbox - Mischen Klasse Feature und Anweisung Blöcke

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

#> 

Und ich bekomme diese Fehlermeldung:

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.

So ... wie kann ich die Vorlage umschreiben dies zu erreichen?

Antwort

11

Nach dem ersten Klassen-Feature-Block müssen Sie alle nachfolgenden Anweisungsblöcke auch Klassen-Feature-Blöcke erstellen.

Unter den Abdeckungen beendet der First-Class-Feature-Block die "Generate" -Methode im Hintergrund und wechselt zum Einfügen des Inhalts als Mitglieder der Behind the Scenes-Klasse der Vorlage.

Wenn Sie Visual Studio 2010 verwenden, können Sie immer eine vorverarbeitete Vorlage erstellen und Ihren normalen Vorlagencode einfügen, um zu sehen, was unter der Haube passiert.

5

Sie sollten alle Klassenfunktionen im gleichen Funktionsblock unter jedem Ausgang haben.

+0

Wenn ich tun, dass ich keine Ausgabe an allen –

+0

bekommen wie ich sehe. Ich verstehe nicht wirklich, wie die Antwort in der anderen Frage funktionieren sollte, aber ich kann Ihnen sagen, dass dies eine Regel für T4 ist. Ich würde empfehlen, einen Link zu der generierten Datei im anderen Projekt hinzuzufügen. – erikkallen

0

Während @ GarethJ's Antwort erklärt, warum dies passiert, sagt es Ihnen nicht die Heilung. Sie benötigen ein Pluszeichen hinzufügen, das heißt verwenden „< # +“ statt nur „< #“

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