Sdílet prostřednictvím


Ladění textové šablony T4

V textových šablonách můžete nastavit zarážky. Pokud chcete ladit textovou šablonu v době návrhu, uložte soubor textové šablony a v místní nabídce souboru v Průzkumník řešení zvolte Ladit šablonu T4. Pokud chcete ladit textovou šablonu za běhu, stačí ladit aplikaci, do které patří.

Pokud chcete ladit textovou šablonu, měli byste porozumět krokům procesu transformace šablony. V každém kroku může dojít k různým druhům chyb. Postup je následující.

Krok Šablona návrhu: když k ní dojde Šablona za běhu: když k ní dojde
Kód se vygeneruje z textové šablony.

Chyby ve direktivách nebo neodpovídající nebo neuspořádané <#...#> značky
Když uložíte šablonu nebo vyvoláte transformaci textu. Když uložíte šablonu nebo vyvoláte transformaci textu.
Vygenerovaný kód je zkompilován.

Chyby kompilace v kódu šablony
Bezprostředně po předchozím kroku. Spolu s kódem aplikace.
Spustí se kód.

Chyby za běhu v kódu šablony
Bezprostředně po předchozím kroku. Když aplikace spustí a vyvolá kód šablony.

Ve většině případů jsou čísla řádků v kódu šablony uvedena v sestavě chyb. Pokud sestava chyb odkazuje na dočasný název souboru, obvyklou příčinou je neshodná hranatá závorka v kódu textové šablony.

Zarážky můžete nastavit v textových šablonách a ladit obvyklým způsobem.

Běžné chyby a opravy

Následující tabulka uvádí nejběžnější chyby a jejich opravy.

Chybová zpráva Popis Řešení
Nepodařilo se načíst základní třídu,{0} ze které transformační třída dědí. Nastane, pokud nemůžete najít základní třídu zadanou v inherits parametru v direktivě šablony. Zpráva obsahuje číslo řádku direktivy šablony. Ujistěte se, že zadaná třída existuje a že sestavení, ve které existuje, je zadáno v direktivě sestavení.
Překlad textu pro soubor se nezdařil:{0} Nastane, když nemůžete najít zahrnutou šablonu. Zpráva obsahuje název požadovaného souboru zahrnutí. Ujistěte se, že cesta k souboru je relativní vzhledem k původní cestě šablony nebo že je soubor v umístění, které je registrováno u hostitele, nebo že existuje úplná cesta k souboru.
Při inicializaci objektu transformace se vygenerovaly chyby. Transformace se nespustí. Nastane, když inicializace() třídy transformace selhala nebo vrátila hodnotu false. Kód ve funkci Initialize() pochází ze základní třídy transformace zadané v <direktivě #@template#> a z procesorů direktiv. Chyba, která způsobila selhání inicializace, pravděpodobně je v seznamu chyb. Prozkoumejte, proč selhal. Můžete se podívat na skutečný vygenerovaný kód pro Initialize() pomocí postupů pro ladění šablony.
Sestavení '{0}' pro procesor direktiv '{1}' nebylo uděleno sada oprávnění FullTrust. Procesory direktiv mohou poskytovat pouze důvěryhodná sestavení. Tento procesor direktiv se nenačte. Nastane, když systém neuděluje Oprávnění FullTrust sestavení obsahující procesor direktiv. Zpráva obsahuje název sestavení a název procesoru direktiv. Ujistěte se, že na místním počítači používáte pouze důvěryhodná sestavení.
Cesta '{0}' musí být buď místní pro tento počítač, nebo část vaší důvěryhodné zóny. Nastane, když direktiva nebo direktiva sestavení odkazuje na soubor, který není na místním počítači nebo v důvěryhodné zóně vaší sítě. Ujistěte se, že adresář, ve kterém jsou umístěny direktivy direktiv nebo direktiv sestavení, je ve vaší důvěryhodné zóně. Do důvěryhodné zóny můžete přidat síťový adresář prostřednictvím Internet Exploreru.
Více chyb syntaxe, například "Neplatný token catch" nebo "Obor názvů nemůže přímo obsahovat členy" Příliš mnoho uzavíracích závorek v kódu šablony Kompilátor je matoucí se standardním kódem generování. Zkontrolujte počet uzavíracích závorek a závorek uvnitř oddělovačů kódu.
Smyčky nebo podmíněné smyčky se nekompilovaly nebo nespouštějí správně. Například: <#if (i>10)#> Number is: <#= i #>.

Tento kód vždy vypíše hodnotu i. Podmínkou je pouze argument Číslo je:.
V jazyce C# vždy používejte složené závorky k ohraničení textových bloků, které jsou vložené do příkazů ovládacího prvku. Přidat složené závorky: <#if (i>10) { #> Number is: <#= i #><# } #>.
Výraz je příliš složitý při zpracování šablony návrhu nebo kompilace šablony modulu runtime (předzpracované).

Visual Studio přestane fungovat při pokusu o kontrolu kódu vygenerovaného šablonou modulu runtime.
Blok textu je příliš dlouhý. T4 převede textové bloky na výraz zřetězení řetězce s jedním řetězcovým literálem pro každý řádek šablony. Velmi dlouhé textové bloky můžou přeskakovat limity velikosti kompilátoru. Rozdělte dlouhý blok textu s blokem výrazu, například:

<#= "" #>

Popisy a opravy upozornění

Následující tabulka uvádí nejběžnější upozornění společně s opravami, pokud jsou k dispozici.

Zpráva upozornění Popis Řešení
Načtení souboru{0} include vrátilo řetězec s hodnotou null nebo prázdným řetězcem. Nastane, pokud je zahrnutý soubor textové šablony prázdný. Zpráva obsahuje název souboru zahrnutého souboru. Buď odeberte direktivu include, nebo se ujistěte, že soubor obsahuje nějaký obsah.
Kompilace transformace: Předloží tento řetězec na všechny chyby nebo upozornění pocházející z kompilátoru při kompilaci transformace. Tento řetězec znamená, že kompilátor vyhodil chybu nebo upozornění. Pokud máte potíže s nalezením knihovny DLL, možná budete muset zadat úplnou cestu nebo plně kvalifikovaný silný název, pokud je knihovna DLL v GAC.
Parametr '{0}' již v direktivě existuje. Duplicitní parametr bude ignorován. Nastane, když je parametr zadán více než jednou v direktivě. Zpráva obsahuje název parametru a číslo řádku direktivy. Odeberte specifikaci duplicitního parametru.
Při načítání souboru{0} include došlo k chybě. Direktiva include bude ignorována. Nastane, když nemůžete najít soubor zadaný v direktivě include . Zpráva obsahuje název souboru a číslo řádku direktivy. Ujistěte se, že soubor include existuje buď ve stejném adresáři jako původní textový soubor šablony, nebo v jednom z adresářů zahrnutí, které jsou zaregistrované u hostitele.
Pro třídu Transformation byla zadána neplatná základní třída. Základní třída musí být odvozena z Microsoft.VisualStudio.TextTemplating.TextTransformation. Nastane, inherits když parametr v direktivě šablony určuje třídu, která nedědí z TextTransformation. Zpráva obsahuje číslo řádku direktivy šablony. Zadejte třídu, která je odvozena od TextTransformation.
V direktivě template byla zadána neplatná jazyková verze. Jazyková verze musí být ve formátu xx-XX. Použije se invariantní jazyková verze. Nastane, když parametr jazykové verze v direktivě šablony je nesprávně zadán. Zpráva obsahuje číslo řádku direktivy šablony. Změňte parametr jazykové verze na platnou jazykovou verzi ve formátu xx-XX.
V direktivě šablony byla zadána neplatná hodnota{0} ladění . Hodnota ladění musí být true nebo false. Použije se výchozí hodnota "false". Nastane, když debug je parametr v direktivě šablony zadán nesprávně. Zpráva obsahuje číslo řádku direktivy šablony. Nastavte ladicí parametr na true nebo false.
V direktivě šablony byla zadána neplatná hodnota{0} HostSpecific . Hodnota HostSpecific musí být true nebo false. Použije se výchozí hodnota "false". Nastane, když je parametr specifický pro hostitele v direktivě template zadán nesprávně. Zpráva obsahuje číslo řádku direktivy šablony. Nastavte parametr specifický pro hostitele na hodnotu true nebo false.
V direktivě template byla zadána neplatná jazyková{0} hodnota . Jazyk musí být "C#" nebo "VB". Použije se výchozí hodnota jazyka C#. Nastane, když je v direktivě template zadán nepodporovaný jazyk. Jsou povoleny pouze "C#" nebo "VB" (nerozlišují malá a velká písmena). Zpráva obsahuje číslo řádku direktivy šablony. language Nastavte parametr v direktivě šablony na "C#" nebo "VB".
V šabloně bylo nalezeno více direktiv výstupu. Všechny kromě první budou ignorovány. Nastane, když je v souboru šablony zadáno více output direktiv. Zpráva obsahuje číslo řádku duplicitní výstupní direktivy. Odeberte duplicitní output direktivy.
V šabloně bylo nalezeno více direktiv šablon. Všechny kromě první budou ignorovány. V rámci jedné direktivy šablony by mělo být zadáno více parametrů direktivy šablony. Nastane, pokud v textovém souboru šablony zadáte více template direktiv (včetně zahrnutých souborů). Zpráva obsahuje číslo řádku duplicitní direktivy šablony. Agregujte různé template direktivy do jedné template direktivy.
Pro direktivu s názvem '{0}' nebyl zadán žádný procesor. Direktiva bude ignorována. Nastane, pokud zadáte direktivu custom , ale nezadáte processor atribut. Zpráva obsahuje název direktivy a číslo řádku. processor Zadejte atribut s názvem procesoru directive pro direktivu.
Procesor s názvem '{0}' nebyl nalezen pro direktivu s názvem '{1}'. Direktiva bude ignorována. Nastane, když systém nemůže najít directive procesor, který jste zadali v rámci direktivy custom . Zpráva obsahuje název direktivy, název procesoru a číslo řádku direktivy. processor Nastavte atribut v direktivě na název procesoru direktiv.
Požadovaný parametr "{0}' pro direktivu '{1}' nebyl nalezen. Direktiva bude ignorována. Nastane, když systém neposkytuje požadovaný parametr direktivy. Zpráva obsahuje název chybějícího parametru, název direktivy a číslo řádku. Zadejte chybějící parametr.
Procesor s názvem '{0}' nepodporuje direktivu s názvem '{1}'. Direktiva bude ignorována. Nastane, když procesor direktiv nepodporuje direktivu. Zpráva obsahuje název a číslo řádku direktivy pro přesměrování spolu s názvem procesoru direktiv. Opravte název direktivy.
Direktiva include pro soubor '{0}' způsobí nekonečnou smyčku. Zobrazí se, pokud jsou zadány direktivy zahrnutí cyklického zahrnutí (například soubor A obsahuje soubor B, který obsahuje soubor A). Nezadávejte cyklické direktivy include.
Spuštěná transformace: Předpendá tento řetězec na všechny chyby nebo upozornění generovaná při spuštění transformace. Nevztahuje se.
V bloku byla nalezena neočekávaná počáteční nebo koncová značka. Ujistěte se, že jste nezadali chybně počáteční nebo koncovou značku a že v šabloně nemáte žádné vnořené bloky. Zobrazí se, když máte neočekávaný <# nebo #>. To znamená, že pokud máte <# po jiné otevřené značce, která nebyla uzavřena, nebo máte #> , pokud před ní není otevřená značka. Zpráva obsahuje číslo řádku neshodované značky. Buď odeberte neodpovídající počáteční nebo koncovou značku, nebo použijte řídicí znak.
Direktiva byla zadána v nesprávném formátu. Direktiva bude ignorována. Zadejte direktivu ve formátu. <#@ name [parametername="parametervalue"]* #> Zobrazí se analyzátorem, pokud není direktiva zadána ve správném formátu. Zpráva obsahuje číslo řádku nesprávné direktivy. Ujistěte se, že všechny direktivy jsou ve formátu <#@ name [parametername="parametervalue"]* #>. Další informace naleznete v tématu T4 Text Template Direktivy.
Načtení sestavení '{0}' pro procesor registrovaných direktiv '{1}' se nezdařilo.

{2}
Nastane, když procesor direktiv nelze načíst hostitelem. Zpráva identifikuje sestavení zadané pro procesor direktiv a název procesoru direktiv. Ujistěte se, že je procesor direktiv správně zaregistrovaný a že sestavení existuje.
Nepodařilo se najít typ '{0}' v sestavení '{1}' pro registrovaný procesor direktiv '{2}'

{3}
Nastane, když typ procesoru direktiv nelze načíst z jeho sestavení. Zpráva obsahuje název procesoru typů, sestavení a direktiv. Vshost najde v registru informace o procesoru direktiv (název, sestavení a typ). Ujistěte se, že je procesor direktiv správně registrován a že typ existuje v sestavení.
Při načítání sestavení došlo{0} k potížím. Nastane, když dojde k potížím při načítání sestavení. Zpráva obsahuje název sestavení. Můžete zadat sestavení, která mají být načtena v <direktivách @#assembly#> a procesory direktiv. Chybová zpráva, která následuje za tímto řetězcem, by měla poskytnout více dat o tom, proč se načtení sestavení nezdařilo.
Při vytváření a inicializaci procesoru pro direktivu s názvem '{1}' došlo k potížím. Typ procesoru je {0}. Direktiva bude ignorována. Nastane, když systém nemohl vytvořit nebo inicializovat procesor direktiv. Zpráva obsahuje název a číslo řádku direktivy a typ procesoru. Ujistěte se, že používáte správný procesor direktiv a že procesor direktiv má veřejný výchozí konstruktor. V opačném případě pomocí možností ladění zjistěte, proč metoda Initialize() procesoru direktiv selhává. Další informace najdete v tématu Řešení potíží s textovými šablonami.
Při zpracování direktivy s názvem '{0}' došlo k výjimce. Nastane, když procesor direktiv vyvolá výjimku při zpracování direktivy. Ujistěte se, že parametry procesoru direktiv jsou správné.
Hostitel při pokusu o vyřešení odkazu na{0} sestavení "" vyvolal výjimku. Nastane, když hostitel vyvolá výjimku, když se pokusí přeložit odkaz na sestavení. Zpráva obsahuje referenční řetězec sestavení. Odkazy na sestavení pocházejí z <direktiv @#assembly#> a z procesorů direktiv. Ujistěte se, že parametr name zadaný v parametru sestavení je správný.
Pokus o zadání nepodporované {1} hodnoty{0} pro direktivu {2} Vyskytuje se v RequiresProvidesDirectiveProcessor (všechny naše generované procesory direktiv jsou odvozeny z něj), když zadáte nepodporovaný vyžaduje nebo poskytuje argument. Ujistěte se, že názvy v párech name='value' zadané v požadavku a poskytují parametry správné.