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 poté v místní nabídce souboru v Průzkumníku ř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í.

Step Š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é <#...#> tagy.
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.
Kód běží.

Chyby běhové v kódu šablony
Bezprostředně po předchozím kroku. Když se vaše aplikace spustí a vyvolá kód šablony.

Ve většině případů jsou čísla řádků v kódu šablony uvedena ve zprávě o chybách. Pokud sestava chyb odkazuje na dočasný název souboru, obvyklou příčinou je neodpovídající 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.

Zpráva o chybě Description Solution
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 příkazu šablony. Ujistěte se, že zadaná třída existuje a že sestavení, ve které existuje, je zadáno v direktivě sestavení.
Nepodařilo se vyřešit zahrnutí textu pro soubor:{0} Nastane, když nemůžete najít zahrnutou šablonu. Zpráva obsahuje název požadovaného include souboru. 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}' nebyla udělena 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ělí úplná oprávnění (FullTrust) sestavení obsahujícímu 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ď lokální pro tento počítač, nebo součá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 nebo direktivy 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 si to plete s generovaným standardním kódem. Zkontrolujte počet uzavíracích závorek a závorek uvnitř oddělovačů kódu.
Smyčky nebo podmínky 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 text 'Čí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 v době návrhu nebo kompilaci za běhu (předzpracované) šablony.

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řevádí textové bloky na výraz pro zřetězení řetězců, který obsahuje jeden řetězcový literál pro každý řádek šablony. Velmi dlouhé textové bloky můžou přeskakovat limity velikosti kompilátoru. Rozdělte dlouhý blok textu blokem výrazu, jako například:

<#= "" #>

Popisy a opravy varování

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

Zpráva upozornění Description Solution
Načtení include souboru {0} vrátilo prázdný nebo null řetězec. Nastane, pokud je zahrnutý soubor textové šablony prázdný. Zpráva poskytuje název zahrnutého souboru. Buď odeberte direktivu include, nebo se ujistěte, že soubor obsahuje nějaký obsah.
Kompilace převodu Předřadí tento řetězec ke všem chybám nebo upozorněním pocházejícím 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. Když nastane, že parametr inherits 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á kultura. Kultura musí být ve formátu "xx-XX". Použije se invariantní kultura. Nastane, když parametr kulturního nastavení v direktivě šablony je zadán nesprávně. Zpráva obsahuje číslo řádku direktivy šablony. Změňte parametr kulturní prostředí na platný parametr ve formátu "xx-XX".
V direktivě šablony byla zadána neplatná hodnota ladění '{0}'. 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 uvádí číslo řádku pokynu šablony. Nastavte ladicí parametr na true nebo false.
V direktivě šablony byla zadána neplatná hodnota HostSpecific '{0}'. 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 uvádí číslo řádku příkazu šablony. Nastavte parametr specifický pro hostitele na hodnotu true nebo false.
V direktivě 'template' byla zadána neplatná jazyková hodnota {0}. 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. Do jedné direktivy šablony by mělo být zahrnuto několik parametrů. Nastane, pokud v textovém souboru šablony zadáte více template direktiv (včetně zahrnutých souborů). Zpráva obsahuje číslo řádku duplicitního příkazu š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 poskytuje název a číslo řádku problematické direktivy 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 specifikovány cyklické direktivy zahrnutí (například soubor A obsahuje soubor B, který obsahuje soubor A). Nezadávejte cyklické direktivy „include“.
Probíhající transformace Předpendá tento řetězec na všechny chyby nebo upozornění generovaná při spuštění transformace. Nelze použít.
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 escape 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 Směrnice.
Načtení sestavení '{0}' pro procesor registrovaných direktiv '{1}' se nezdařilo.

{2}
Když hostitel nemohl načíst procesor direktiv, nastane tato situace. 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 direktivního procesoru nelze načíst z jeho sestavení. Zpráva obsahuje název typu, sestavení a procesor 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 k potížím{0}. K problému dochází 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 zpracovávači 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 sestavení {0} vyvolal výjimku. Nastane, když hostitel vyvolá chybu, když se pokusí vyřešit odkaz na sestavení. Zpráva obsahuje referenční řetězec sestavení. Odkazy na sestavení pocházejí z <direktiv @#assembly#> a z procesorů zpracovávajících direktivy. 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), při zadání nepodporovaného argumentu typu requires nebo provides. Ujistěte se, že názvy v párech name='value' uvedených v parametrech "requires" a "provides" jsou správné.