Debuggen einer T4-Textvorlage

Sie können Haltepunkte in Textvorlagen festlegen.Um eine Entwurfszeittextvorlage zu debuggen, wählen Sie T4-Vorlage debuggen im Kontextmenü des Textvorlagendatei im Projektmappen-Explorer enthalten.Um eine Laufzeittextvorlage zu debuggen, müssen Sie die Anwendung einfach der sie gehört.

Zum Debuggen einer Textvorlage, sollten Sie die Schritte des Vorlagentransformationsprozesses verstehen.Verschiedene Arten von Fehlern können innerhalb jedes Schritts auftreten.Die Schritte werden im Folgenden beschrieben.

Schritt

Entwurfszeitvorlage: wenn sie geschieht

Laufzeitvorlage: wenn sie geschieht

Code wird von der Textvorlage generiert.

Fehler in der - Direktive oder in schlecht zusammengestellten oder zerrütteten <#…#>-Tags.

Wenn Sie die Vorlage speichern oder Texttransformation aufrufen.

Wenn Sie die Vorlage speichern oder Texttransformation aufrufen.

Generierter Code wird kompiliert.

Kompilierungsfehler im Vorlagencode.

Fügen Sie unmittelbar nach dem vorherigen Schritt.

Zusammen mit dem Anwendungscode.

Code wird.

Laufzeitfehler im Vorlagencode.

Fügen Sie unmittelbar nach dem vorherigen Schritt.

Wenn die Anwendung den Vorlagencode ausführt und aufruft.

In den meisten Fällen enthält der Fehlerbericht die Zeilennummern im Vorlagencode.Wenn der Fehlerbericht auf einen temporären Dateinamen verweist, ist dies in der Regel auf eine nicht übereinstimmende Klammer im Code der Textvorlage zurückzuführen.

Sie können Haltepunkte in Textvorlagen festlegen und wie normalerweise debuggen.

Allgemeine Fehler und Korrekturmaßnahmen

In der folgenden Tabelle sind die gängigsten Fehler und ihre Behebung aufgeführt.

Fehlermeldung

Description

Lösung

Fehler beim Laden von Basisklasse {0}, von der die Transformationsklasse erbt.

Tritt auf, wenn Sie die Basisklasse nicht finden können, die im inherits-Parameter einer Vorlagendirektive angegeben ist.Die Meldung gibt die Zeilennummer der Vorlagendirektive an.

Stellen Sie sicher, dass die angegebene Klasse vorhanden ist und die zugehörige Assembly in einer Assemblydirektive angegeben ist.

Fehler beim Auflösen von Includetext für Datei {0}

Tritt auf, wenn Sie eine enthaltene Vorlage finden können.Der Meldung enthält den Namen der angeforderten Include-Datei.

Stellen Sie sicher, dass der Dateipfad relativ zum ursprünglichen Vorlagenpfad ist, oder dass die Datei an einem Speicherort ist, der vom Host registriert ist, oder dass es einen vollständigen Pfad zur Datei gibt.

Fehler beim Initialisieren des Transformationsobjekts.Die Transformation wird nicht ausgeführt.

Tritt auf, wenn das Initialisieren der Transformationsklasse gescheitert ist oder "false" zurückgegeben wurde.

Der Code in der Initialize()-Funktion kommt von der in der <#@template#>-Direktive angegebenen Basistransformationsklasse und von Direktivenprozessoren.Der Fehler, der verursacht hat, dass die Initialisierung gescheitert ist, ist auf der Fehlerliste aufgeführt.Führen Sie eine Überprüfung durch, warum der Vorgang fehlgeschlagen ist.Sie können den tatsächlichen generierten Code für Initialize() betrachten, indem Sie die Schritte zum Debuggen einer Vorlage ausführen.

Der Assembly {0} für Direktivenprozessor {1} wurde der FullTrust-Berechtigungssatz nicht gewährt.Nur vertrauenswürdige Assemblys dürfen Direktivenprozessoren bereitstellen.Dieser Direktivenprozessor wird nicht geladen.

Tritt auf, wenn das System einer Assembly mit einem Direktivenprozessor keine FullTrust-Berechtigungen gewährt.Die Meldung enthält den Namen der Assembly und den Namen des Direktivenprozessors.

Stellen Sie sicher, dass Sie nur vertrauenswürdige Assemblys auf dem lokalen Computer verwenden.

Der Pfad "{0}" muss auf diesem Computer entweder lokal oder Teil der vertrauenswürdigen Zone sein.

Tritt auf, wenn eine Direktive oder Assemblydirektive auf eine Datei verweist, die nicht auf dem lokalen Computer oder in der vertrauten Zone des Netzwerks ist.

Stellen Sie sicher, dass das Verzeichnis, wo sich die Direktiven- oder Assemblydirektiven befinden, in der vertrauenswürdigen Zone ist.Sie können der vertrauenswürdigen Zone durch Internet Explorer ein Netzwerkverzeichnis hinzufügen.

Mehrere Syntaxfehler z. B. "ungültige Token-'Erfassung'" oder "Ein Namespace kann keine Member direkt enthalten"

Zu viele schließende geschweifte Klammern im Vorlagencode.Der Compiler verwechselt es mit dem Standardgenerierungscode.

Überprüfen Sie die Anzahl von schließenden geschweiften Klammern und Klammern in Codetrennzeichen.

Schleifen oder Bedingungen nicht kompiliert oder korrekt ausgeführt.Beispiel:

<#if (i>10)#>
   Number is: <#= i #>.

Dieser Code gibt immer den Wert i aus.Nur "Nummer ist:" ist bedingt.

Verwenden Sie in C# immer geschweifte Klammern, um Textblöcke zu umgeben, die in Steueranweisungen eingebettet sind.

Fügen Sie geschweifte Klammern hinzu:

<#if (i>10) { #>
   Number is: <#= i #>.
<# } #>

"Ausdruck zu komplex" beim Bearbeiten einer Entwurfszeitvorlage oder Kompilieren einer (vorverarbeiteten) Laufzeitvorlage.

Visual Studio funktioniert nicht mehr, wenn Sie versuchen, von einer Laufzeitvorlage generierten Code zu überprüfen.

Textblock ist zu lang.T4 konvertiert Textblöcke in ein Zeichenfolgenverkettungsausdruck mit einem Zeichenfolgenliteral für jede Vorlagenzeile.Sehr lange Textblöcke können die Compiler-Größenbeschränkungen überschreiten.

Teilen Sie den langen Text-Block mit einem Ausdrucksblock wie folgt:

<#= "" #>

Warnungsbeschreibungen und Korrekturen

In der folgenden Tabelle sind die gängigsten Warnungen zusammen mit Patches (sofern verfügbar) aufgeführt.

Warnmeldung

Description

Lösung

Das Laden der Includedatei {0} hat eine Nullzeichenfolge oder eine leere Zeichenfolge zurückgegeben.

Tritt auf, wenn eine enthaltene Textvorlagendatei leer ist.Der Meldung enthält den Dateinamen der enthaltenen Datei.

Entfernen Sie die Include-Direktive oder stellen sicher, dass die Datei etwas Inhalt hat.

Kompilieren von Transformation:

Stellt diese Zeichenfolge allen Fehlern oder Warnungen voran, die aus dem Compiler stammen, wenn die Transformation kompiliert wird.Diese Zeichenfolge bedeutet, dass der Compiler einen Fehler oder eine Warnung ausgelöst hat.

Wenn Sie ein Problem beim Suchen der DLL haben, müssen Sie möglicherweise entweder den vollständigen Pfad oder einen vollqualifizierten starken Namen angeben, wenn die DLL im GAC ist.

Der Parameter "{0}" ist bereits in der Direktive vorhanden.Das Parameterduplikat wird ignoriert.

Tritt auf, wenn ein Parameter mehr als einmal in einer Direktive angegeben wird.Die Meldung enthält den Namen des Parameters und die Zeilennummer der Direktive.

Entfernen Sie die doppelte Parameterspezifikation.

Beim Laden der Include-Datei "{0}" trat ein Fehler auf.Die Includedirektive wird ignoriert.

Tritt auf, wenn Sie eine in einer include-Direktive angegebene Datei nicht finden können.Die Meldung enthält den Namen der Datei und die Zeilennummer der Direktive.

Stellen Sie sicher, dass die Includedatei entweder im gleichen Verzeichnis wie die ursprüngliche Textvorlagendatei oder in einem der Includeverzeichnisse ist, die beim Host registriert sind.

Eine ungültige Basisklasse wurde als Transformationsklasse angegeben.Die Basisklasse muss sich von Microsoft.VisualStudio.TextTemplating.TextTransformation ableiten.

Tritt auf, wenn der inherits-Parameter in einer Vorlagendirektive eine Klasse angibt, die nicht von TextTransformation erbt.Die Meldung gibt die Zeilennummer der Vorlagendirektive an.

Geben Sie eine von der TextTransformation-Klasse abgeleitete Klasse an.

Eine ungültige Kultur wurde in der template-Direktive angegeben.Die Kultur muss das Format "xx-XX" aufweisen.Die invariante Kultur wird verwendet.

Tritt auf, wenn der Kulturparameter in einer Vorlagendirektive falsch angegeben wird.Die Meldung gibt die Zeilennummer der Vorlagendirektive an.

Ändern Sie den Kulturparameter in eine gültige Kultur im "xx-XX"-Format um.

Der ungültige Debugwert {0} wurde in der Vorlagendirektive angegeben.Der Debugwert muss "True" oder "False" sein.Der Standardwert "False" wird verwendet.

Tritt auf, wenn der debug-Kulturparameter in einer Vorlagendirektive falsch angegeben wird.Die Meldung gibt die Zeilennummer der Vorlagendirektive an.

Legen Sie den Debugparameter auf "True" oder "False" fest.

Der ungültige HostSpecific-Wert {0} wurde in der Vorlagendirektive angegeben.Der HostSpecific-Wert muss entweder "true" oder "false" sein.Der Standardwert "False" wird verwendet.

Tritt auf, wenn der hostspezifische Parameter in einer template-Direktive falsch angegeben wird.Die Meldung gibt die Zeilennummer der Vorlagendirektive an.

Legen Sie den hostspezifischen Parameter auf "True" oder "False" fest.

Die ungültige Sprache {0} wurde in der Vorlagendirektive angegeben.Die Sprache muss "C#" oder "VB" sein.Der Standardwert "C#" wird verwendet.

Tritt auf, wenn eine nicht unterstützte Sprache in der template-Direktive angegeben wird.Nur "C#" oder "VB" sind zugelassen (Groß-/Kleinschreibung nicht beachtend).Die Meldung gibt die Zeilennummer der Vorlagendirektive an.

Legen Sie den language-Parameter in der Vorlagendirektive auf "C#" oder "VB" fest.

Mehrere output-Direktiven wurden in der Vorlage gefunden.Alle außer der ersten werden ignoriert.

Tritt auf, wenn mehrere output-Direktiven in einer Vorlagendatei angegeben werden.Die Meldung gibt die Zeilennummer der doppelten Ausgabendirektive an.

Entfernen Sie doppelte output-Direktiven.

Mehrere template-Direktiven wurden in der Vorlage gefunden.Alle außer der ersten werden ignoriert.Mehrere Parameter für die template-Direktive müssen innerhalb einer template-Direktive angegeben werden.

Tritt auf, wenn Sie mehrere template-Direktiven innerhalb einer Textvorlagendatei (einschließlich enthaltener Dateien) angeben.Die Meldung gibt die Zeilennummer der doppelten Vorlagendirektive an.

Aggregieren Sie die anderen template-Direktiven in eine template-Direktive.

Kein Prozessor wurde für die Direktive {0} angegeben.Die Direktive wird ignoriert.

Tritt auf, wenn Sie eine custom-Direktive angeben, aber kein processor-Attribut bereitstellen.Die Meldung enthält den Namen der Direktive und die Zeilennummer.

Stellen Sie ein processor-Attribut mit dem Namen des directive-Prozessors für die Direktive bereit.

Der Prozessor {0} konnte für die Direktive {1} nicht gefunden werden.Die Direktive wird ignoriert.

Tritt auf, wenn das System den innerhalb einer custom-Direktive angegebenen directive-Prozessor nicht finden kann.Die Meldung enthält den Direktivennamen, den Prozessornamen und die Zeilennummer der Direktive.

Legen Sie das processor-Attribut in der Direktive auf den Namen des Direktivenprozessors fest.

Der erforderlicher Parameter {0} für die Direktive {1} wurde nicht gefunden.Die Direktive wird ignoriert.

Tritt auf, wenn das System keinen erforderlichen Direktivenparameter bereitstellt.Die Meldung enthält den Namen des fehlenden Parameters, den Direktivennamen und die Zeilennummer.

Stellen Sie den fehlenden Parameter bereit.

Der Prozessor namens "{0}" unterstützt nicht die Direktive namens "{1}".Die Direktive wird ignoriert.

Tritt auf, wenn ein Direktivenprozessor eine Direktive nicht unterstützt.Die Meldung stellt den Namen und die Zeilennummer der problematischen Direktive und den Namen des Direktivenprozessors bereit.

Korrigieren Sie den Namen der Direktive.

Die Includedirektive für die Datei {0} erzeugt eine Endlosschleife.

Angezeigt, wenn zirkuläre Includedirektiven (Datei A enthält z. B. Datei B, die Datei A enthält) angegeben werden.

Geben Sie keine zirkulären Include-Direktiven an.

Ausführen von Transformation:

Stellt diese Zeichenfolge allen Fehlern oder Warnungen voran, die generiert werden, während die Transformation ausgeführt wird.

Nicht zutreffend.

Ein unerwartetes Start- oder Endtag wurde in einem Block gefunden.Stellen Sie sicher, dass Sie Start- bzw. Endtag richtig eingegeben haben und keine Blöcke in der Vorlage schachtelt haben.

Angezeigt, wenn Sie ein unerwartetes <# or #> haben.Dies gilt, wenn ein <# nach einem anderen geöffneten Tag vorliegt, das nicht geschlossen wurde, oder es liegt ein #> vor, wenn es kein geöffnetes Tag davor gibt.Die Meldung gibt die Zeilennummer des falsch zugewiesenen Tags an.

Entfernen Sie das nicht übereinstimmende Start- oder das Endtag, oder verwenden Sie ein Escape-Zeichen.

Eine Direktive wurde im falschen Format angegeben.Die Direktive wird ignoriert.Geben Sie die Direktive im Format <#@ Name [parametername = "parameterwert"]* #> an.

Vom Parser angezeigt, wenn eine Direktive nicht im richtigen Format angegeben wird.Die Meldung gibt die Zeilennummer der falschen Direktive an.

Stellen Sie sicher, dass alle Direktiven folgende Form aufweisen: <#@ name [parametername="parametervalue"]* #>.Weitere Informationen finden Sie unter T4-Textvorlagendirektiven.

Fehler beim Laden von Assembly {0} für registrierten Direktivenprozessor {1}

{2}

Tritt auf, wenn ein Direktivenprozessor nicht vom Host geladen werden konnte.Die Meldung identifiziert die für den Direktivenprozessor und den Namen des Direktivenprozessors bereitgestellte Assembly.

Stellen Sie sicher, dass der Direktivenprozessor ordnungsgemäß registriert und die Assembly vorhanden ist.

Fehler beim Suchen von Typ {0} in Assembly {1} für registrierten Direktivenprozessor {2}

{3}

Tritt auf, wenn ein Direktivenprozessortyp nicht von seiner Assembly geladen werden konnte.Die Meldung enthält den Namen des Typs, der Assembly und des Direktivenprozessors.

Der vshost sucht Direktivenprozessorinformationen (Name, Assembly und Typ) in der Registrierung.Stellen Sie sicher, dass der Direktivenprozessor ordnungsgemäß registriert und der Typ in der Assembly vorhanden ist.

Es gab ein Problem beim Laden der Assembly "{0}".

Tritt auf, wenn es ein Problem beim Laden einer Assembly gibt.Die Meldung stellt den Namen der Assembly bereit.

Sie können Assemblys angeben, die in <@#assembly#>-Direktiven und von Direktivenprozessoren geladen werden sollen.Die Fehlermeldung, die dieser Zeichenfolge folgt, sollte weitere Daten darüber enthalten, warum die Assemblylast fehlgeschlagen ist.

Es gab ein Problem beim Erstellen und Initialisieren des Prozessors für eine Direktive mit der Bezeichnung "{1}".Der Typ des Prozessors ist "{0}".Die Direktive wird ignoriert.

Tritt auf, wenn das System einen Direktivenprozessor nicht erstellen oder initialisieren konnte.Die Meldung stellt den Namen und die Zeilennummer der Direktive und den Prozessortyp bereit.

Stellen Sie sicher, dass Sie den richtigen Direktivenprozessor verwenden, und dass der Direktivenprozessor über einen öffentlichen Standardkonstruktor verfügt.Verwenden Sie andernfalls die Debugoptionen, um herauszufinden, warum die Initialize()-Methode des Direktivenprozessors fehlschlägt.Weitere Informationen finden Sie unter Debuggen einer T4-Textvorlage.

Beim Verarbeiten der Direktive {0} wurde eine Ausnahme ausgelöst.

Tritt auf, wenn ein Direktivenprozessor beim Verarbeiten einer Direktive eine Ausnahme auslöst.

Stellen Sie sicher, dass die Parameter zum Direktivenprozessor richtig sind.

Beim Versuch, den Assemblyverweis {0} aufzulösen hat der Host eine Ausnahme ausgelöst.

Tritt auf, wenn der Host eine Ausnahme auslöst, wenn er versucht, einen Assemblyverweis aufzulösen.Die Meldung stellt die Assemblyverweiszeichenfolge bereit.

Assemblyverweise kommen von <@#assembly#>-Direktiven und von Direktivenprozessoren.Stellen Sie sicher, dass der Namenparameter im Assemblyparameter korrekt ist.

Versuch, nicht unterstützten {1} Wert {0} für Direktive {2} anzugeben

Tritt durch den RequiresProvidesDirectiveProcessor (alle generierten Direktivenprozessoren leiten sich von ihm ab) auf, wenn Sie ein nicht unterstütztes anforderndes oder bereitstellendes Argument bereitstellen.

Stellen Sie sicher, dass die Namen der "Name='value'"-Paare korrekt sind.