Felsöka en T4-textmall

Du kan ange brytpunkter i textmallar. Om du vill felsöka en textmall för designtid sparar du textmallfilen och väljer sedan Felsök T4-mall på snabbmenyn för filen i Solution Explorer. Om du vill felsöka en körtidstextmall kan du enkelt felsöka det program som den tillhör.

Om du vill felsöka en textmall bör du förstå stegen i malltransformeringsprocessen. Olika typer av fel kan inträffa i varje steg. Stegen är följande.

Step Mall för designtid: när det händer Körtidsmall: när det händer
Kod genereras från textmallen.

Fel i direktiv eller felmatchade eller oordnade <#...#> taggar.
När du sparar mallen eller anropar texttransformering. När du sparar mallen eller anropar texttransformering.
Genererad kod kompileras.

Kompileringsfel i mallkoden.
Omedelbart efter föregående steg. Tillsammans med din programkod.
Koden körs.

Körningsfel i mallkoden.
Omedelbart efter föregående steg. När programmet körs och anropar mallkoden.

I de flesta fall anges radnummer i mallkoden i felrapporten. När felrapporten refererar till ett tillfälligt filnamn är den vanliga orsaken en felmatchad hakparentes i textmallens kod.

Du kan ange brytpunkter i textmallar och felsöka på vanligt sätt.

Vanliga fel och korrigeringar

I följande tabell visas de vanligaste felen och deras korrigeringar.

Felmeddelande Description Lösning
Det gick inte att läsa in basklassen '{0}' från vilken transformationsklassen ärver. Inträffar om du inte hittar basklassen som anges i parametern inherits i ett malldirektiv. Meddelandet innehåller radnumret för malldirektivet. Kontrollera att den angivna klassen finns och att sammansättningen som den finns i anges i ett sammansättningsdirektiv.
Det gick inte att lösa inkluderingstexten för filen:{0} Inträffar när du inte hittar en inkluderad mall. Meddelandet innehåller namnet på den begärda inkluderingsfilen. Kontrollera att filsökvägen är relativ till den ursprungliga mallsökvägen, att filen finns på en plats som är registrerad hos värden eller att en fullständig sökväg till filen anges.
Fel genererades när transformeringsobjektet initierades. Omvandlingen kommer inte att köras. Inträffar när "Initialize()" för transformeringsklassen misslyckades eller returnerade false. Koden i funktionen Initialize() kommer från bastransformeringsklassen <som anges i direktivet #@template#> och från direktivprocessorer. Felet som gjorde att initieringen misslyckades finns förmodligen i fellistan. Undersöka varför det misslyckades. Du kan titta på den faktiska genererade koden för Initialize() genom att följa procedurerna för att felsöka en mall.
Sammansättningen "{0}" för direktivprocessorn "{1}" beviljades inte behörighetsuppsättningen FullTrust. Endast betrodda sammansättningar får tillhandahålla direktivprocessorer. Den här direktivprocessorn kommer inte att läsas in. Inträffar när systemet inte beviljar FullTrust-behörigheter till en sammansättning som innehåller en direktivprocessor. Meddelandet innehåller namnet på sammansättningen och namnet på direktivprocessorn. Se till att du bara använder betrodda sammansättningar på den lokala datorn.
Sökvägen {0} måste vara antingen lokal på den här datorn eller en del av din betrodda zon. Inträffar när ett direktiv eller sammansättningsdirektiv refererar till en fil som inte finns på din lokala dator eller i nätverkets betrodda zon. Se till att katalogen där direktivet eller sammansättningsdirektiven finns finns i din betrodda zon. Du kan lägga till en nätverkskatalog i din betrodda zon via Internet Explorer.
Flera syntaxfel, till exempel "Ogiltig token 'catch'" eller "Ett namnområde kan inte innehålla medlemmar direkt" För många avslutande klammerparenteser i mallkoden. Kompilatorn förvirrar den med standardgenereringskoden. Kontrollera antalet avslutande klammerparenteser och hakparenteser i kodavgränsare.
Loopar eller villkor som inte kompilerats eller körts korrekt. Till exempel: <#if (i>10)#> Number is: <#= i #>.

Den här koden matar alltid ut värdet för i. Endast "Talet är:" är betingat.
I C# använder du alltid klammerparenteser för att omge textblock som är inbäddade i kontrollinstruktioner. Lägg till klammerparenteser: <#if (i>10) { #> Number is: <#= i #><# } #>.
"Uttrycket är för komplext" när du bearbetar en mall för designtid eller kompilerar en mall för körning (förbearbetad).

Visual Studio slutar fungera när du försöker inspektera kod som genereras av en körningsmall.
Textblocket är för långt. T4 konverterar textblock till ett strängsammanfogningsuttryck med en strängliteral för varje mallrad. Mycket långa textblock kan överskrida kompilatorns storleksgränser. Dela upp det långa textblocket med ett uttrycksblock som:

<#= "" #>

Varningsbeskrivningar och korrigeringar

I följande tabell visas de vanligaste varningarna tillsammans med korrigeringar, om de är tillgängliga.

Varningsmeddelande Description Lösning
Laddning av inkluderingsfilen '{0}' returnerade en null- eller tom sträng. Inträffar om en inkluderad textmallfil är tom. Meddelandet innehåller filnamnet på den inkluderade filen. Ta antingen bort inkluderingsdirektivet eller se till att filen har innehåll.
Kompilering av transformering: Förbereder den här strängen för alla fel eller varningar som kommer från kompilatorn när transformeringen kompileras. Den här strängen innebär att kompilatorn utlöste ett fel eller en varning. Om du har problem med att hitta DLL:en kan du behöva ange antingen den fullständiga sökvägen eller ett fullständigt kvalificerat starkt namn om DLL:en finns i gac.
Parametern "{0}" finns redan i direktivet. Dubblettparametern kommer att ignoreras. Inträffar när en parameter anges mer än en gång i ett direktiv. Meddelandet innehåller namnet på parametern och radnumret för direktivet. Ta bort den duplicerade parameterspecifikationen.
Ett fel uppstod när inkluderingsfilen skulle{0} läsas in. Inkluderingsdirektivet kommer att ignoreras. Inträffar när du inte kan hitta en fil som anges i ett include direktiv. Meddelandet innehåller namnet på filen och radnumret för direktivet. Kontrollera att den inkluderade filen finns antingen i samma mapp som textmallfilen eller i någon av de inkluderingsmappar som är registrerade hos hostsystemet.
En ogiltig basklass angavs för transformeringsklassen. Basklassen måste härledas från Microsoft.VisualStudio.TextTemplating.TextTransformation. Inträffar när parametern inherits i ett malldirektiv anger en klass som inte ärver från TextTransformation. Meddelandet innehåller radnumret för malldirektivet. Ange en klass som härleds från TextTransformation.
En ogiltig kultur angavs i "malldirektivet". Kulturen måste ha formatet "xx-XX". Den invarianta kulturen används. Inträffar när kulturparametern i ett malldirektiv har angetts felaktigt. Meddelandet innehåller radnumret för malldirektivet. Ändra kulturparametern till en giltig kultur i formatet "xx-XX".
Ett ogiltigt felsökningsvärde{0} angavs i malldirektivet. Felsökningsvärdet måste vara antingen "sant" eller "falskt". Standardvärdet "false" används. Inträffar när parametern debug i ett malldirektiv har angetts felaktigt. Meddelandet innehåller radnumret för malldirektivet. Ange felsökningsparametern till "true" eller "false".
Ett ogiltigt HostSpecific-värde{0} angavs i malldirektivet. HostSpecific-värdet måste vara antingen "true" eller "false". Standardvärdet "false" används. Inträffar när den värdspecifika parametern i ett template direktiv har angetts felaktigt. Meddelandet innehåller radnumret för malldirektivet. Ange den värdspecifika parametern till "true" eller "false".
Ett ogiltigt språk{0} angavs i "malldirektivet". Språket måste vara antingen "C#" eller "VB". Standardvärdet "C#" används. Inträffar när ett språk som inte stöds anges i template direktivet. Endast "C#" eller "VB" tillåts (skiftlägesokänsligt). Meddelandet innehåller radnumret för malldirektivet. Ange parametern language i malldirektivet till "C#" eller "VB".
Flera utdatadirektiv hittades i mallen. Alla utom den första ignoreras. Inträffar när flera output direktiv anges i en mallfil. Meddelandet innehåller radnumret för det duplicerade utdatadirektivet. Ta bort duplicerade output direktiv.
Flera malldirektiv hittades i mallen. Alla utom den första ignoreras. Flera parametrar till malldirektivet bör anges i ett malldirektiv. Inträffar om du anger flera template direktiv i en textmallfil (inklusive inkluderade filer). Meddelandet innehåller radnumret för det duplicerade malldirektivet. Aggregera de olika template direktiven i ett template direktiv.
Ingen processor har angetts för ett direktiv med namnet "{0}". Direktivet kommer att ignoreras. Inträffar om du anger ett custom direktiv, men inte anger något processor attribut. Meddelandet innehåller namnet på direktivet och radnumret. Ange ett processor attribut med namnet på processorn directive för direktivet.
Det gick inte att hitta en processor med namnet "{0}" för direktivet med namnet "{1}". Direktivet kommer att ignoreras. Inträffar när systemet inte kan hitta den directive processor som du angav i ett custom direktiv. Meddelandet innehåller direktivets namn, processornamn och direktivets radnummer. processor Ange attributet i direktivet till namnet på direktivprocessorn.
Det gick inte att hitta en obligatorisk parameter för{0} direktivet{1}. Direktivet kommer att ignoreras. Inträffar när systemet inte tillhandahåller en obligatorisk direktivparameter. Meddelandet innehåller namnet på den saknade parametern, direktivnamnet och radnumret. Ange parametern som saknas.
Processorn med namnet "{0}" stöder inte direktivet med namnet "{1}". Direktivet kommer att ignoreras. Inträffar när en direktivprocessor inte stöder ett direktiv. Meddelandet innehåller namnet och radnumret för det kränkande direktivet tillsammans med namnet på direktivprocessorn. Korrigera direktivets namn.
Inkludera-direktivet för filen '{0}' orsakar en oändlig loop. Visas om cirkulära inkluderingsdirektiv anges (till exempel fil A innehåller fil B, som innehåller fil A). Ange inte cirkulära inkluderingsdirektiv.
Transformering som körs: Förbereder den här strängen för alla fel eller varningar som genereras när transformen körs. Ej tillämpbart.
En oväntad start- eller sluttagg hittades i ett block. Kontrollera att du inte har feltypat en start- eller sluttagg och att du inte har några kapslade block i mallen. Visas när du har ett oväntat <# eller #>. Om du har en <# efter en öppen tagg som inte har stängts, eller om du har en #> när det inte finns någon öppen tagg före den. Meddelandet innehåller radnumret för den felmatchade taggen. Ta antingen bort den felmatchade start- eller sluttaggen eller använd ett escape-tecken.
Ett direktiv angavs i fel format. Direktivet kommer att ignoreras. Ange direktivet i formatet <#@ name [parametername="parametervalue"]* #> Visas av parsern om ett direktiv inte har angetts i rätt format. Meddelandet innehåller radnumret för det felaktiga direktivet. Se till att alla direktiv är i formatet <#@ name [parametername="parametervalue"]* #>. Mer information finns i T4-direktiv för textmallar.
Det gick inte att läsa in Assembly '{0}' för den registrerade direktivprocessorn '{1}'

{2}
Inträffar när en direktivprocessor inte kunde laddas av värden. Meddelandet identifierar den sammansättning som tillhandahålls för direktivprocessorn och namnet på direktivprocessorn. Kontrollera att direktivprocessorn är korrekt registrerad och att sammansättningen finns.
Det gick inte att hitta typen '{0}' i sammansättningen '{1}' för den registrerade direktivprocessorn '{2}'

{3}
Inträffar när det inte gick att läsa in en direktivprocessortyp från dess sammansättning. Meddelandet innehåller namnet på typ-, sammansättnings- och direktivprocessorn. Vshost hittar information om direktivprocessorn (namn, sammansättning och typ) i registret. Kontrollera att direktivprocessorn är korrekt registrerad och att typen finns i sammansättningen.
Det uppstod ett problem vid inläsning av sammansättningen '{0}' Inträffar när det uppstår ett problem med att läsa in en sammansättning. Meddelandet innehåller namnet på sammansättningen. Du kan ange sammansättningar som ska läsas in i <@#assembly#-> direktiv och av direktivprocessorer. Felmeddelandet som följer den här strängen bör ge mer data om varför sammansättningsbelastningen misslyckades.
Det uppstod ett problem när processorn skulle skapas och initieras för ett direktiv med namnet "{1}". Processortypen är {0}. Direktivet kommer att ignoreras. Inträffar när systemet inte kunde skapa eller initiera en direktivprocessor. Meddelandet innehåller direktivets namn och radnummer och typen av processor. Se till att du använder rätt direktivprocessor och att direktivprocessorn har en offentlig standardkonstruktor. Annars kan du använda felsökningsalternativen för att ta reda på varför metoden Initialize() för direktivprocessorn misslyckas. Mer information finns i Felsöka textmallar.
Ett undantag utlöstes när ett direktiv med namnet "{0}" bearbetades. Inträffar när en direktivprocessor utlöser ett undantag när ett direktiv bearbetas. Se till att parametrarna för direktivprocessorn är korrekta.
Värden kastade ett undantag när den försökte lösa sammansättningsreferensen '{0}'. Inträffar när hosten utlöser ett undantag när den försöker hämta en assembly-referens. Meddelandet innehåller sammansättningsreferenssträngen. Sammansättningsreferenser kommer från <@#assembly#-> direktiv och från direktivprocessorer. Kontrollera att parametern "name" som anges i sammansättningsparametern är korrekt.
Försök att ange ett {1} värde '{0}' som inte stöds för direktivet {2} Sker av RequiresProvidesDirectiveProcessor (alla våra genererade direktivprocessorer härleds från det), när du anger ett krav som inte stöds eller innehåller argument. Se till att namnen i name='value'-paren som anges i parametrarna kräver och tillhandahålls är korrekta.