Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt onderbrekingspunten instellen in tekstsjablonen. Als u fouten wilt opsporen in een ontwerp-tijdtekstsjabloon, slaat u het tekstbestand op en kiest u T4-sjabloon opsporen in het snelmenu van het bestand in Solution Explorer. Als u fouten wilt opsporen in een runtimetekstsjabloon, hoeft u alleen maar fouten op te sporen in de toepassing waartoe deze behoort.
Als u fouten in een tekstsjabloon wilt opsporen, moet u de stappen van het sjabloontransformatieproces begrijpen. In elke stap kunnen verschillende soorten fouten optreden. De stappen zijn als volgt.
| Step | Ontwerptijdsjabloon: wanneer het gebeurt | Runtime-sjabloon: wanneer deze plaatsvindt |
|---|---|---|
| Code wordt gegenereerd op basis van de tekstsjabloon. Fouten in instructies of niet-overeenkomende of ongelijke of ongeordende <#...#> tags. |
Wanneer u de sjabloon opslaat of teksttransformatie aanroept. | Wanneer u de sjabloon opslaat of teksttransformatie aanroept. |
| Gegenereerde code wordt gecompileerd. Compilatiefouten in uw sjablooncode. |
Direct na de vorige stap. | Samen met uw toepassingscode. |
| Code wordt uitgevoerd. Runtimefouten in de sjablooncode. |
Direct na de vorige stap. | Wanneer uw toepassing wordt uitgevoerd en de sjablooncode aanroept. |
In de meeste gevallen worden regelnummers in de sjablooncode gegeven in het foutenrapport. Wanneer het foutenrapport verwijst naar een tijdelijke bestandsnaam, is de gebruikelijke oorzaak een niet-overeenkomende haak in de code van de tekstsjabloon.
U kunt onderbrekingspunten instellen in tekstsjablonen en fouten opsporen op de gebruikelijke manier.
Veelvoorkomende fouten en oplossingen
De volgende tabel bevat de meest voorkomende fouten en de bijbehorende oplossingen.
| Foutmelding | Description | Solution |
|---|---|---|
| Kan de basisklasse '{0}' niet laden waaruit de transformatieklasse wordt overgenomen. | Vindt plaats als u de basisklasse die is opgegeven in de inherits parameter in een sjabloonrichtlijn niet kunt vinden. Het bericht bevat het regelnummer van de sjabloonrichtlijn. |
Zorg ervoor dat de opgegeven klasse bestaat en dat de assembly waarin deze zich bevindt, is opgegeven in een assembly-instructie. |
| Kan het opnemen van tekst voor het bestand niet oplossen:{0} | Treedt op wanneer u geen opgenomen sjabloon kunt vinden. Het bericht bevat de naam van het aangevraagde include-bestand. | Zorg ervoor dat het bestandspad relatief is ten opzichte van het oorspronkelijke sjabloonpad of dat het bestand zich op een locatie bevindt die is geregistreerd bij de host of dat er een volledig pad naar het bestand is. |
| Er zijn fouten gegenereerd bij het initialiseren van het transformatieobject. De transformatie wordt niet uitgevoerd. | Vindt plaats wanneer de 'Initialize()' van de transformatieklasse is mislukt of onwaar is geretourneerd. | De code in de functie Initialize() is afkomstig van de basistransformatieklasse die is opgegeven in de <instructie #@template#> en van richtlijnprocessors. De fout die ervoor heeft gezorgd dat initialisatie is mislukt, staat waarschijnlijk in de lijst met fouten. Onderzoek waarom het is mislukt. U kunt de werkelijke gegenereerde code voor Initialize() bekijken door de procedures te volgen voor het opsporen van fouten in een sjabloon. |
| De assembly '{0}' voor richtlijnprocessor '{1}' is niet voorzien van de machtigingenset FullTrust. Alleen vertrouwde assemblies mogen richtlijnprocessors leveren. Deze richtlijnprocessor wordt niet geladen. | Treedt op wanneer het systeem geen FullTrust-machtigingen verleent aan een assembly die een richtlijnprocessor bevat. Het bericht bevat de naam van de assembly en de naam van de richtlijnprocessor. | Zorg ervoor dat u alleen vertrouwde assembly's op de lokale computer gebruikt. |
| Het pad '{0}' moet lokaal zijn op deze computer of onderdeel van uw vertrouwde zone. | Treedt op wanneer een richtlijn of assembly-instructie verwijst naar een bestand dat zich niet op uw lokale computer of in de vertrouwde zone van uw netwerk bevindt. | Zorg ervoor dat de map waarin de richtlijnen of assemblage-instructies zich bevinden, in uw vertrouwde zone is opgenomen. U kunt een netwerkmap toevoegen aan uw vertrouwde zone via Internet Explorer. |
| Meerdere syntaxisfouten, zoals 'Ongeldig token 'catch', of 'Een naamruimte kan niet rechtstreeks leden bevatten' | Te veel sluitende accolades in uw sjablooncode. De compiler verwart het met de standaard-generatiecode. | Controleer het aantal accolades en vierkante haken in de scheidingstekens voor code. |
Lussen of voorwaarden zijn niet gecompileerd of correct uitgevoerd. Voorbeeld: <#if (i>10)#> Number is: <#= i #>.Met deze code wordt altijd de waarde van i uitgevoerd. Alleen 'Getal is:' is voorwaardelijk. |
Gebruik in C# altijd accolades om tekstblokken te plaatsen die zijn ingesloten in besturingsinstructies. | Accolades toevoegen: <#if (i>10) { #> Number is: <#= i #><# } #>. |
| 'Expressie is te complex' bij het verwerken van een ontwerpsjabloon of het compileren van een runtimesjabloon (vooraf verwerkt). Visual Studio werkt niet meer wanneer er wordt geprobeerd code te inspecteren die is gegenereerd door een runtimesjabloon. |
Tekstblok is te lang. T4 converteert tekstblokken naar een tekenreekssamenvoegingsexpressie, met één letterlijke tekenreeks voor elke sjabloonregel. Zeer lange tekstblokken kunnen de groottelimieten van de compiler overschrijden. | Het lange tekstblok opsplitsen met een expressieblok, zoals:<#= "" #> |
Waarschuwingsbeschrijvingen en oplossingen
De volgende tabel bevat de meest voorkomende waarschuwingen, samen met oplossingen, indien beschikbaar.
| Waarschuwingsbericht | Description | Solution |
|---|---|---|
| Als u het include-bestand{0} laadt, wordt een null- of lege tekenreeks geretourneerd. | Treedt op als een opgenomen tekstbestand leeg is. Het bericht bevat de bestandsnaam van het opgenomen bestand. | Verwijder de insluitingsrichtlijn of zorg ervoor dat het bestand inhoud bevat. |
| Transformatie compileren: | Deze tekenreeks wordt voorafgeplaatst bij alle fouten of waarschuwingen die afkomstig zijn van de compiler wanneer de transformatie wordt gecompileerd. Deze tekenreeks betekent dat de compiler een fout of waarschuwing heeft veroorzaakt. | Als u een probleem hebt met het vinden van het DLL-bestand, moet u mogelijk het volledige pad of een volledig gekwalificeerde sterke naam opgeven als het DLL-bestand zich in de GAC bevindt. |
| De parameter '{0}' bestaat al in de richtlijn. De dubbele parameter wordt genegeerd. | Treedt op wanneer een parameter meer dan één keer in een richtlijn is opgegeven. Het bericht bevat de naam van de parameter en het regelnummer van de instructie. | Verwijder de dubbele parameterspecificatie. |
| Er is een fout opgetreden bij het laden van het include-bestand '{0}'. De insluitingsrichtlijn wordt genegeerd. | Treedt op wanneer u geen bestand kunt vinden dat is opgegeven in een include instructie. Het bericht bevat de naam van het bestand en het regelnummer van de instructie. |
Zorg ervoor dat het insluitingsbestand bestaat in dezelfde map als het oorspronkelijke tekstbestand of in een van de include-mappen die zijn geregistreerd bij de host. |
| Er is een ongeldige basisklasse opgegeven voor de transformatieklasse. De basisklasse moet zijn afgeleid van Microsoft.VisualStudio.TextTemplating.TextTransformation. | Treedt op wanneer de inherits parameter in een sjabloonrichtlijn een klasse aangeeft die niet overdrat van TextTransformation. Het bericht bevat het regelnummer van de sjabloonrichtlijn. |
Geef een klasse op die is afgeleid van TextTransformation. |
| Er is een ongeldige cultuur opgegeven in de sjabloonrichtlijn. De cultuur moet het "xx-XX" formaat hebben. De invariante cultuur wordt gebruikt. | Treedt op wanneer de cultuurparameter in een sjabloonrichtlijn onjuist is opgegeven. Het bericht bevat het regelnummer van de sjabloonrichtlijn. | Wijzig de parameter voor cultuur naar een geldige cultuur met de notatie 'xx-XX'. |
| Er is een ongeldige foutopsporingswaarde{0} opgegeven in de sjabloonrichtlijn. De foutopsporingswaarde moet 'true' of 'false' zijn. De standaardwaarde 'false' wordt gebruikt. | Treedt op wanneer de debug parameter in een sjabloonrichtlijn onjuist is opgegeven. Het bericht bevat het regelnummer van de sjabloonrichtlijn. |
Stel de parameter voor foutopsporing in op 'true' of 'false'. |
| Er is een ongeldige HostSpecific-waarde '{0}' opgegeven in de sjabloonrichtlijn. De HostSpecific-waarde moet 'true' of 'false' zijn. De standaardwaarde 'false' wordt gebruikt. | Treedt op wanneer de hostspecifieke parameter in een template instructie onjuist is opgegeven. Het bericht bevat het regelnummer van de sjabloonrichtlijn. |
Stel de hostspecifieke parameter in op 'true' of 'false'. |
| Er is een ongeldige taal '{0}' opgegeven in de 'sjabloon' richtlijn. De taal moet 'C#' of 'VB' zijn. De standaardwaarde van 'C#' wordt gebruikt. | Treedt op wanneer een niet-ondersteunde taal wordt opgegeven in de template richtlijn. Alleen "C#" of "VB" zijn toegestaan (hoofdletterongevoelig). Het bericht bevat het regelnummer van de sjabloonrichtlijn. |
Stel de language parameter in de sjabloonrichtlijn in op 'C#' of 'VB'. |
| Er zijn meerdere uitvoerrichtlijnen gevonden in de sjabloon. Alles behalve de eerste wordt genegeerd. | Treedt op wanneer meerdere output instructies worden opgegeven in een sjabloonbestand. Het bericht bevat het regelnummer van de dubbele uitvoerrichtlijn. |
Dubbele output instructies verwijderen. |
| Er zijn meerdere sjabloonrichtlijnen gevonden in de sjabloon. Alles behalve de eerste wordt genegeerd. Er moeten meerdere parameters voor de sjabloonrichtlijn worden opgegeven binnen één sjabloonrichtlijn. | Treedt op als u meerdere template instructies opgeeft in een tekstbestand (inclusief opgenomen bestanden). Het bericht bevat het regelnummer van de dubbele sjabloonrichtlijn. |
De verschillende template richtlijnen samenvoegen tot één template richtlijn. |
| Er is geen processor opgegeven voor een richtlijn met de naam '{0}'. De richtlijn wordt genegeerd. | Vindt plaats als u een custom-instructie opgeeft, maar geen processor-kenmerk opgeeft. Het bericht bevat de naam van de instructie en het regelnummer. |
Geef een processor kenmerk op met de naam van de directive processor voor de instructie. |
| Er is geen processor met de naam '{0}' gevonden voor de richtlijn met de naam '{1}'. De richtlijn wordt genegeerd. | Treedt op wanneer het systeem de directive processor die u in een custom richtlijn hebt opgegeven, niet kan vinden. Het bericht bevat de instructienaam, processornaam en het regelnummer van de richtlijn. |
Stel het processor kenmerk in de richtlijn in op de naam van de richtlijnprocessor. |
| De vereiste parameter '{0}' voor de richtlijn '{1}' is niet gevonden. De richtlijn wordt genegeerd. | Treedt op wanneer het systeem geen vereiste instructieparameter opgeeft. Het bericht bevat de naam van de ontbrekende parameter, de naam van de instructie en het regelnummer. | Geef de ontbrekende parameter op. |
| De verwerker '{0}' ondersteunt de instructie '{1}' niet. De richtlijn wordt genegeerd. | Treedt op wanneer een richtlijnprocessor geen ondersteuning biedt voor een richtlijn. Het bericht bevat de naam en het regelnummer van de overtredende richtlijn, samen met de naam van de richtlijnprocessor. | Corrigeer de naam van de richtlijn. |
| De include-instructie voor bestand '{0}' veroorzaakt een oneindige lus. | Wordt weergegeven als circulaire include-richtlijnen zijn opgegeven (bijvoorbeeld bestand A bevat bestand B, dat op zijn beurt bestand A bevat). | Geef geen circulaire include-aanwijzingen op. |
| Lopende transformatie: | Voegt deze tekenreeks toe aan alle fouten of waarschuwingen die worden gegenereerd tijdens het uitvoeren van de transformatie. | Niet van toepassing. |
| Er is een onverwachte begin- of eindtag gevonden in een blok. Zorg ervoor dat u geen begin- of eindtag verkeerd hebt getypt en dat u geen geneste blokken in de sjabloon hebt. | Wordt weergegeven wanneer u een onverwacht <# of #> teken hebt. Met andere woorden, als u een <# hebt na een andere open tag die niet is afgesloten, of als u een #> hebt wanneer er geen onafgesloten open tag voor is. Het bericht bevat het regelnummer van de niet-overeenkomende tag. | Verwijder de niet-overeenkomende begin- of eindtag of gebruik een escape-teken. |
Er is een richtlijn opgegeven in de verkeerde indeling. De richtlijn wordt genegeerd. Geef de instructie op in het formaat <#@ name [parametername="parametervalue"]* #> |
Weergegeven door de parser als een instructie niet is opgegeven in de juiste indeling. Het bericht bevat het regelnummer van de onjuiste instructie. | Zorg ervoor dat alle instructies in de vorm <#@ name [parametername="parametervalue"]* #>staan. Zie T4-tekstsjabloonrichtlijnen voor meer informatie. |
| Kan assembly '{0}' niet laden voor geregistreerde instructieprocessor '{1}' {2} |
Treedt op wanneer een richtlijnprocessor niet kan worden geladen door de host. Het bericht identificeert de assembly die is verstrekt voor de richtlijnprocessor en de naam van de richtlijnprocessor. | Zorg ervoor dat de richtlijnprocessor correct is geregistreerd en dat de assembly bestaat. |
| Kan het type '{0}' niet vinden in assembly '{1}' voor geregistreerde instructieprocessor '{2}' {3} |
Treedt op wanneer een type instructieprocessor niet kan worden geladen vanuit de assembly. Het bericht bevat de naam van het type, de assembly en de instructieprocessor. | De vshost vindt informatie over richtlijnprocessor (naam, assembly en type) in het register. Zorg ervoor dat de instructieprocessor correct is geregistreerd en dat het type in de assembly bestaat. |
| Er is een probleem opgetreden bij het laden van de assembly '{0}' | Treedt op wanneer er een probleem is met het laden van een assembly. Het bericht bevat de naam van de assemblage. | U kunt assembly's opgeven die in <@#assembly#>-instructies en door richtlijnverwerkers moeten worden geladen. Het foutbericht dat volgt op deze tekenreeks, moet meer gegevens geven over waarom het laden van de assemblage is mislukt. |
| Er is een probleem opgetreden bij het maken en initialiseren van de processor voor een richtlijn met de naam '{1}'. Het type processor is {0}. De richtlijn wordt genegeerd. | Treedt op wanneer het systeem geen richtlijnprocessor kan maken of initialiseren. Het bericht bevat de naam en het regelnummer van de instructie en het type processor. | Zorg ervoor dat u de juiste instructieprocessor gebruikt en dat de instructieprocessor een openbare standaardconstructor heeft. Gebruik anders de foutopsporingsopties om erachter te komen waarom de methode Initialize() van de instructieprocessor mislukt. Zie Tekstsjablonen voor probleemoplossing voor meer informatie. |
| Er is een uitzondering opgetreden tijdens het verwerken van een richtlijn met de naam '{0}'. | Treedt op wanneer een richtlijnprocessor een uitzondering genereert bij het verwerken van een richtlijn. | Zorg ervoor dat de parameters voor de instructieprocessor juist zijn. |
| De host heeft een uitzondering veroorzaakt tijdens het oplossen van de assemblyverwijzing '{0}'. | Treedt op wanneer de host een uitzondering gooit bij het proberen een assembly-verwijzing op te lossen. Het bericht bevat de assembly-referentiereeks. | Assemblyverwijzingen zijn afkomstig uit <@#assembly#> -instructies en van richtlijnverwerkers. Zorg ervoor dat de parameter 'name' die is opgegeven in de assemblyparameter juist is. |
| Poging om niet-ondersteunde {1} waarde '{0}' voor richtlijn op te geven {2} | Vindt plaats in de RequiresProvidesDirectiveProcessor (dit geldt voor al onze gegenereerde instructieprocessors), wanneer u een niet-ondersteund requires of provides argument opgeeft. | Zorg ervoor dat de namen in de naam='waardeparen' die zijn opgegeven in de vereiste voorwaarden en parameters juist zijn. |