Condividi tramite


Debug di un modello di testo T4

È possibile impostare punti di interruzione nei modelli di testo.Per eseguire il debug di un modello di testo della fase di progettazione, scegliere Debug modello T4 il menu di scelta rapida del file modello di testo in Esplora soluzioni.Per eseguire il debug di un modello di testo della fase di esecuzione, eseguire il debug semplicemente l'applicazione a cui appartiene.

Per eseguire il debug di un modello di testo, è necessario capire i passaggi del processo di trasformazione del modello.Diversi tipi di errori possono verificarsi in ogni passaggio.I passaggi sono i seguenti:

Passaggio

Modello di progettazione: quando si verifica

Modello della fase di esecuzione: quando si verifica

Il codice viene generato dal modello di testo.

Errori nelle direttive, o nei tag non corrispondono o non ordinati <#…#>.

Quando si salva la trasformazione di testo invoke o del modello.

Quando si salva la trasformazione di testo invoke o del modello.

Il codice generato viene compilato.

Errori di compilazione nel codice del modello.

Immediatamente dopo il passaggio precedente.

Con il codice dell'applicazione.

Esecuzione di codice.

Errori di runtime nel codice del modello.

Immediatamente dopo il passaggio precedente.

Quando l'applicazione esegue e richiama il codice del modello.

Nella maggior parte dei casi, nel rapporto degli errori vengono forniti i numeri di riga nel codice del modello.Quando il rapporto degli errori fa riferimento a un nome di file temporaneo, in genere la causa è la mancanza di una parentesi nel codice del modello di testo.

È possibile impostare punti di interruzione nei modelli di testo e il debug come sempre.

Errori comuni e correzioni

Nella tabella che segue vengono elencati gli errori più comuni e le relative correzioni.

Messaggio di errore

Descrizione

Soluzione

Impossibile caricare classe di base' {0}' da cui eredita la classe Transformation.

Si verifica se non è possibile trovare la classe di base specificata nel parametro inherits in una direttiva del modello.Il messaggio fornisce il numero di riga della direttiva del modello.

Assicurarsi che la classe specificata esista e che l'assembly nel quale esiste viene specificato in una direttiva dell'assembly.

Impossibile risolvere il testo di inclusione per il file: {0}

Si verifica quando non è possibile trovare un modello incluso.Il messaggio fornisce il nome del file di inclusione richiesto.

Assicurarsi che il percorso del file sia relativo al percorso del modello originale o che il file è in un percorso registrato con l'host, o che c'è un percorso completo per il file.

Errori durante l'inizializzazione dell'oggetto trasformazione.La trasformazione non verrà eseguita.

Si verifica quando 'Inizialize()' della classe Transformation non è riuscito o ha restituito False.

Il codice nella funzione per Initialize() deriva dalla classe di trasformazione di base specificata nella direttiva <#@template#> e dai processori di direttive.L'errore per cui l'inizializzazione non è riuscita probabilmente si trova nell'elenco degli errori.Esaminare perché non è riuscito.È possibile cercare nell'effettivo codice generato Inizializzare() seguendo le procedure per eseguire il debug di un modello.

All'assembly '{0}' per processore di direttiva '{1}' non è stato concesso il set di autorizzazioni FullTrust.I processori di direttiva possono essere forniti solo dagli assembly attendibili.Questo processore di direttiva non verrà caricato.

Si verifica quando il sistema non concede autorizzazioni FullTrust a un assembly che contiene un processore di direttiva.Il messaggio fornisce il nome dell'assembly e il nome del processore della direttiva.

Assicurarsi che si utilizzino solo assembly attendibili sul computer locale.

Il percorso '{0}' deve essere locale per questo computer o parte dell'area attendibile.

Si verifica quando una direttiva o una direttiva di assembly fa riferimento a un file che non si trova sul computer locale o nella zona attendibile della rete.

Assicurarsi che la directory dove si trovano la direttiva o le direttive di assembly, sia nell'area attendibile.È possibile aggiungere una directory della rete all'area attendibile tramite Internet Explorer.

Più errori di sintassi quali "Token non valido 'catch'" o "Uno spazio dei nomi non può contenere direttamente membri"

Troppo parentesi graffe di chiusura nel codice del modello.Il compilatore lo confonde con il codice di generazione standard.

Controllare il numero di parentesi graffe e parentesi quadre di chiusura all'interno dei delimitatori del codice.

Cicli o istruzioni condizionali non compilate o non eseguite correttamente.Ad esempio:

<#if (i>10)#>
   Number is: <#= i #>.

L'output di questo codice è sempre un valore i.Solo "Number is": è condizionale.

In C# utilizzare sempre le parentesi graffe per racchiudere i blocchi di testo incorporati nelle istruzioni di controllo.

Aggiungere le parentesi graffe:

<#if (i>10) { #>
   Number is: <#= i #>.
<# } #>

"Espressione troppo complessa" durante l'elaborazione di un modello in fase di progettazione o durante la compilazione di un modello runtime (pre-elaborato).

Visual Studio smette di funzionare se si tenta di controllare il codice generato da un modello di runtime.

Il blocco di testo è troppo lungo.Tramite T4 i blocchi di testo vengono convertiti in un'espressione di concatenazione di stringhe, con un valore letterale stringa per ogni riga del modello.Blocchi di testo molto lunghi possono oltrepassare i limiti di dimensione del compilatore.

Suddividere il blocco di testo lungo con un blocco di espressione quale:

<#= "" #>

Avvisi di descrizioni e correzioni dell'errore

Nella tabella seguente vengono elencati gli avvisi più comuni con le relative correzioni, se disponibile.

Messaggio di avviso.

Descrizione

Soluzione

Caricando il file di inclusione' {0}' ha restituito una stringa null o vuota.

Si verifica se un file modello di testo incluso è vuoto.Il messaggio fornisce il nome del file di inclusione.

Rimuovere la direttiva di inclusione o assicurarsi che il file disponga di contenuto.

Compilazione trasformazione:

Antepone questa stringa a tutti gli errori o avvisi provenienti dal compilatore quando compila la trasformazione.Questa stringa significa che il compilatore genera un errore o avviso.

Se si verifica un problema durante l'individuazione della DLL, potrebbe essere necessario fornire il percorso completo o un nome sicuro completo se la DLL è nella GAC.

Il parametro '{0}' esiste già nella direttiva.Il parametro duplicato verrà ignorato.

Si verifica quando un parametro viene specificato più di una volta in una direttiva.Il messaggio fornisce il nome del parametro e il numero della riga della direttiva.

Rimuovere la specifica del parametro duplicata.

Si è verificato un errore durante il caricamento del file di inclusione '{0}'. La direttiva di inclusione verrà ignorata.

Si verifica quando non è possibile trovare un file specificato in una direttiva include.Il messaggio fornisce il nome file e il numero della riga della direttiva.

Assicurarsi che il file di inclusione esista nella stessa directory come file modello di testo originale o in una delle directory di inclusione registrate con l'host.

Classe base non valida specificata per la classe Transformation.La classe di base deve derivare da Microsoft.VisualStudio.TextTemplating.TextTransformation.

Si verifica quando il parametro inherits in una direttiva del modello specifica una classe che non eredita da TextTransformation.Il messaggio fornisce il numero di riga della direttiva del modello.

Specificare una classe che derivi da TextTransformation.

Impostazioni cultura non valide specificate nella direttiva 'template'.Le impostazioni cultura devono essere nel formato "xx-XX".Verrà utilizzata la lingua inglese.

Si verifica quando il parametro dell'impostazione cultura viene specificato erroneamente in una direttiva del modello.Il messaggio fornisce il numero di riga della direttiva del modello.

Impostare il parametro impostazione cultura su un'impostazione cultura valida nel formato "xx-XX".

Un valore di debug '{0}' non valido è stato specificato nella direttiva modello.Il valore di debug deve essere "true" o "false".Verrà utilizzato il valore predefinito "false".

Si verifica quando il parametro debug viene specificato erroneamente in una direttiva del modello.Il messaggio fornisce il numero di riga della direttiva del modello.

Impostare il parametro di debug su "true" o "false".

Un valore HostSpecific '{0}' non valido è stato specificato nella direttiva modello.Il valore HostSpecific deve essere "true" o "false".Verrà utilizzato il valore predefinito "false".

Si verifica quando il parametro specifico dell'host in una direttiva template viene specificato erroneamente.Il messaggio fornisce il numero di riga della direttiva del modello.

Impostare il parametro host specifico su "true" o "false".

Un linguaggio '{0}' non valido è stato specificato nella direttiva 'modello'.Il linguaggio deve essere "C#" o "VB".Verrà utilizzato il valore predefinito "C#".

Si verifica quando viene specificato un linguaggio non supportato nella direttiva template.Solo "C#" o "VB" sono consentiti (senza distinzione tra maiuscole e minuscole).Il messaggio fornisce il numero di riga della direttiva del modello.

Impostare il parametro language nella direttiva del modello su "C#" o "VB".

Più direttive output trovate nel modello.Verranno tutte ignorate, tranne la prima.

Si verifica quando più direttive output vengono specificate in un file modello.Il messaggio fornisce il numero di riga della direttiva di output duplicata.

Rimuovere direttive output duplicate.

Più direttive template trovate nel modello.Verranno tutte ignorate, tranne la prima.I parametri per la direttiva template devono essere specificati all'interno di una direttiva template.

Si verifica se si specificano più direttive template all'interno di un file modello di testo (includendo file inclusi).Il messaggio fornisce il numero di riga della direttiva di modello duplicata.

Aggregare le direttive template diverse in una direttiva template.

Non è stato specificato alcun processore per una direttiva denominata' {0}.'La direttiva verrà ignorata.

Si verifica se si specifica una direttiva custom, ma non fornisce l'attributo processor.Il messaggio fornisce il nome della direttiva e il numero della riga.

Fornire un attributo processor con il nome del processore di directive per la direttiva.

Un processore denominato '{0}' non è stato trovato per la direttiva denominata '{1}'.La direttiva verrà ignorata.

Si verifica quando il sistema non riesce a trovare il processore directive specificato all'interno della direttiva custom.Il messaggio fornisce il nome della direttiva, il nome del processore e il numero della riga della direttiva.

Impostare l'attributo processor nella direttiva in base al nome del processore della direttiva.

Un parametro obbligatorio '{0}' per la direttiva '{1}' non è stato trovato.La direttiva verrà ignorata.

Si verifica quando il sistema non fornisce un parametro direttivo obbligatorio.Il messaggio fornisce il nome del parametro mancante, il nome della direttiva e il numero di riga.

Fornire il parametro mancante.

Il processore denominato '{0}' non supporta la direttiva denominata '{1}'.La direttiva verrà ignorata.

Si verifica quando un processore di direttiva non supporta una direttiva.Il messaggio fornisce il nome e il numero di riga della direttiva all'origine dell'errore insieme al nome del processore della direttiva.

Correggere il nome della direttiva.

La direttiva di inclusione per il file '{0}' causa un ciclo infinito.

Visualizzato se le direttive di inclusione circolare vengono specificate (ad esempio, il file A include il file B che include il file A).

Non specificare direttive di inclusione circolare.

Eseguire trasformazione:

Antepone questa stringa a tutti gli errori o avvisi generati durante l'esecuzione della trasformazione.

Non applicabile.

Tag di inizio o di fine imprevisto trovato all'interno di un blocco.Assicurarsi che non sia stato digitato erroneamente un tag di inizio o fine e che non si disponga di alcun blocco annidato nel modello.

Visualizzato in caso di presenza di < #o #> imprevisto.Ovvero, se si ha un <# dopo un altro tag aperto che non è stato chiuso o si ha un #> quando non c'è un tag aperto che lo precede.Il messaggio fornisce il numero di riga del tag non corrispondente.

Rimuovere l'inizio non corrispondente o il tag di fine o utilizzare un carattere di escape.

Direttiva specificata nel formato non corretto.La direttiva verrà ignorata.Specificare nella direttiva nel formato <#@ name [parametername="parametervalue"]* #>

Visualizzato dal parser se una direttiva non è specificata nel formato corretto.Il messaggio fornisce il numero di riga della direttiva non corretta.

Assicurarsi che tutte le direttive sono in <#@ name [parametername="parametervalue"]* #>.Per ulteriori informazioni, vedere Direttive di modello di testo T4.

Impossibile caricare Assembly '{0}' per processore di direttiva registrato '{1}'

{2}

Si verifica quando un processore di direttiva non è stato caricato dall'host.Il messaggio identifica l'assembly fornito per il processore di direttiva e il nome del processore di direttiva.

Assicurarsi che il processore di direttiva sia registrato correttamente e che l'assembly esiste.

Impossibile trovare tipo '{0}' in Assembly '{1}' per processore di direttiva registrato '{2}'

{3}

Si verifica quando un tipo di processore di direttiva non è stato caricato dall'assembly.Il messaggio fornisce il nome del tipo, dell'assembly e il nome del processore della direttiva.

Vshost trova informazioni sul processore di direttiva (nome, assembly e tipo) nel Registro di sistema.Assicurarsi che il processore di direttiva sia registrato correttamente e che il tipo nell'assembly esiste.

Si è verificato un problema durante il caricamento dell'assembly '{0}'

Si verifica quando c'è un problema durante il caricamento di un assembly.Il messaggio fornisce il nome dell'assembly.

È possibile specificare assembly da caricare nelle direttive <@#assembly#> e dai processori di direttiva.Il messaggio di errore che segue questa stringa deve fornire più dati sul perché il caricamento dell'assembly non è riuscito.

Si è verificato un problema durante la creazione e inizializzazione del processore per una direttiva denominata '{1}'.Il tipo del processore è {0}.La direttiva verrà ignorata.

Si verifica quando il sistema non ha potuto creare o inizializzare un processore di direttiva.Il messaggio fornisce il nome e il numero di riga della direttiva e il tipo del processore.

Assicurarsi di utilizzare il processore di direttiva corretto e che il processore di direttiva dispone di un costruttore predefinito pubblico.In caso contrario, utilizzare le opzioni di debug per scoprire perché il metodo Initialize() del processore di direttiva non sta funzionando.Per ulteriori informazioni, vedere Debug di un modello di testo T4.

Una Eccezione è stata generata durante l'elaborazione di una direttiva denominata '{0}'.

Si verifica quando un processore di direttiva genera un'eccezione in caso di elaborazione di una direttiva.

Assicurarsi che i parametri per il processore di direttiva siano corretti.

L'host genera un'eccezione durante il tentativo di risolvere il riferimento all'assembly '{0}'.

Si verifica quando l'host genera un'eccezione, quando tenta di risolvere un riferimento all'assembly.Il messaggio fornisce la stringa che specifica il riferimento all'assembly.

I riferimenti all'assembly derivano da direttive <@#l'assembly#> e dai processori di direttiva.Assicurarsi che il parametro 'name' fornito nel parametro dell'assembly sia corretto.

Tentativo di specificare il valore '{0}' non supportato {1} per la direttiva {2}

Si verifica con RequiresProvidesDirectiveProcessor (da cui derivano tutti i processori di direttiva generati), quando si offre un argomento richiede o fornisce non supportato.

Assicurarsi che i nomi nelle coppie name='value' fornite nei parametri requires e provides siano corrette.