2016-12-20 3 views
0

Ich versuche, eine Klasse in T4-Vorlage zu schreiben. Es gibt den Fehler:T4-Vorlagen: Fehler beim Namespace

Compiling transofrmation: Type of namespace definition, or end-of-file expected 

wenn ich den folgenden Code:

<#+ 
namespace Learn { 
    public class Converter 
    { 

    } 
} 
#> 

Aber es funktioniert gut, wenn ich Namespace

<#+ 
    public class Converter 
    { 

    } 
#> 

Meine Frage ist, entfernen, warum tut T4 nicht Erkennen Sie die namespace?

+1

Da Code in '<# #>' nicht Code ist, der generiert wird, aber Code, der ausgeführt wird, um Code zu generieren. – Pawel

Antwort

2

< # + #> ist ein Klassen-Feature-Block. Alles, was Sie in diesen Block schreiben, wird in eine Klassenanweisung geschrieben. Wenn Sie einen Namespace hinzufügen wird T4 erzeugen und versuchen, etwas zu kompilieren:

class MyT4TempGen { 

    public string run() { 
      inside here is code that uses a string builder to build up all your <# #> tags into one big statement 
    } 

    from here down all your <#+ #> tags are added 

    namespace Learn { 
     public class Converter { 

     } 
    } 

} 

Dieser nicht gültigen Code C# ist, Namespaces können nicht innerhalb einer Klasse-Anweisung existieren. Wenn Sie es ohne den Namespace tun, werden Sie diese:

class MyT4TempGen { 

    public string run() { 
     inside here is code that uses a string builder to build up all your <# #> tags into one big statement 
    } 

    from here down all your <#+ #> tags are added   

    public class Converter { 

    } 

} 

Welche C# Code gültig ist, Ihre Klasse wird der T4-Compiler erstellt eine Unterklasse der sein.

Hier ist ein Link zu den msdn docs, die die unterstützten Tags erklären. Siehe Abschnitt "Klassen-Feature-Steuerblöcke". Denken Sie daran, dass alles, was Sie in eine TT- oder T4-Datei eingeben, analysiert und in .NET-Code umgewandelt wird, sodass Sie alle normalen Syntaxregeln befolgen müssen.

+0

Danke für die ausführliche Erklärung Frank, das erklärt Dinge. – akshayKhot

Verwandte Themen