Häufige Fehler und Warnungen beim Verwenden von Textvorlagen
Das Fenster Fehlerliste in Visual Studio zeigt Warnungen und Fehler für Textvorlagen an. In diesem Thema werden die allgemeinen Warnungen und Fehler beschrieben, und es wird erläutert, wie Sie diese korrigieren können.
Fehlerbeschreibungen und Patches
In der folgenden Tabelle sind die gängigsten Fehler und ihre Behebung aufgeführt.
Fehlermeldung |
Beschreibungen |
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. |
Beim Initialisieren des Transformationsobjekts wurden Fehler generiert. 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ürdigen Assemblys wird ermöglicht, Direktivenprozessoren zur Verfügung zu stellen. 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. Beispiele:
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:
|
"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 |
Beschreibungen |
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. Die doppelte Parameter 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 für die 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 Vorlagendirektive angegeben. Die Kultur muss im Format "xx-XX" sein. 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 entweder "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 entweder "C#" oder "VB" sein. Der Standardwert von "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 Ausgabedirektiven wurden in der Vorlage gefunden. Bis auf das Erste werden alle Elemente 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 Vorlagendirektiven wurden in der Vorlage gefunden. Bis auf das Erste werden alle Elemente ignoriert. Mehrere Parameter der Vorlagendirektive sollten innerhalb einer Vorlagendirektive 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 = "parametervalue"] * #> 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 Problembehandlung bei T4-Textvorlagen. |
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. |