Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile impostare punti di interruzione nei modelli di testo. Per eseguire il debug di un modello di testo in fase di progettazione, salvare il file del modello di testo e quindi scegliere Debug modello T4 dal menu di scelta rapida del file in Esplora soluzioni. Per eseguire il debug di un modello di testo in fase di esecuzione, è sufficiente eseguire il debug dell'applicazione a cui appartiene.
Per eseguire il debug di un modello di testo, è necessario comprendere i passaggi del processo di trasformazione del modello. All'interno di ogni passaggio possono verificarsi diversi tipi di errori. I passaggi sono i seguenti.
| Step | Modello in fase di progettazione: quando si verifica | Modello di runtime: quando accade |
|---|---|---|
| Il codice viene generato dal modello di testo. Errori nelle direttive o tag non corrispondenti o disordinati <#...#> . |
Quando si salva il modello o si richiama la trasformazione del testo. | Quando si salva il modello o si richiama la trasformazione del testo. |
| Il codice generato viene compilato. Errori di compilazione nel codice del modello. |
Subito dopo il passaggio precedente. | Insieme al codice dell'applicazione. |
| Il codice viene eseguito. Errori di runtime nel codice del modello. |
Subito dopo il passaggio precedente. | Quando l'applicazione viene eseguita e richiama il codice template. |
Nella maggior parte dei casi, i numeri di riga nel codice del modello vengono forniti nel report degli errori. Quando il report degli errori fa riferimento a un nome file temporaneo, la causa consueta è una parentesi non corrispondente nel codice del modello di testo.
È possibile impostare punti di interruzione nei modelli di testo ed eseguire il debug nel modo consueto.
Errori e correzioni comuni
Nella tabella seguente sono elencati gli errori più comuni e le relative correzioni.
| Messaggio di errore | Description | Soluzione |
|---|---|---|
| Impossibile caricare la classe di base '{0}' dalla quale eredita la classe Transformation. | Si verifica se non è possibile trovare la classe base specificata nel inherits parametro in una direttiva modello. Il messaggio fornisce il numero di riga della direttiva modello. |
Assicurarsi che la classe specificata esista e che l'assembly in cui essa esiste sia specificato in una direttiva 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 si trova in un percorso registrato con l'host o che sia presente un percorso completo del file. |
| Gli errori sono stati generati durante l'inizializzazione dell'oggetto trasformazione. La trasformazione non verrà eseguita. | Si verifica quando l'oggetto 'Initialize()' della classe di trasformazione non è riuscito o ha restituito false. | Il codice nella funzione Initialize() deriva dalla classe di trasformazione di base specificata nella <direttiva #@template#> e dai processori di direttiva. L'errore che ha causato il fallimento dell'inizializzazione probabilmente si trova nell'elenco degli errori. Esaminare il motivo per cui non è riuscito. È possibile esaminare il codice generato effettivo per Initialize() seguendo le procedure per eseguire il debug di un modello. |
| All'assembly '{0}' per il processore di direttiva '{1}' non è stato concesso il set di autorizzazioni FullTrust. Solo gli assembly attendibili sono autorizzati a fornire processori di direttiva. Questo processore di direttive non verrà caricato. | Si verifica quando il sistema non concede le autorizzazioni FullTrust a un assembly contenente un processore di direttiva. Il messaggio fornisce il nome dell'assembly e il nome del processore di direttiva. | Assicurarsi di usare solo gli assembly attendibili sul computer locale. |
| Il percorso '{0}' deve essere locale per questo computer o parte della zona attendibile. | Si verifica quando una direttiva o una direttiva assembly fa riferimento a un file che non si trova nel computer locale o nella zona attendibile della rete. | Verificare che la directory in cui si trovano le direttive o le direttive di assembly si trovi nella zona attendibile. È possibile aggiungere una directory di rete all'area attendibile tramite Internet Explorer. |
| Errori di sintassi multipli, ad esempio "Token non valido 'catch'" o "Un namespace non può contenere membri direttamente" | Troppe parentesi graffe di chiusura nel codice del modello. Il compilatore crea confusione con il codice di generazione standard. | Controllare il numero di parentesi graffe di chiusura e parentesi quadre all'interno dei delimitatori di codice. |
Cicli o condizionali non compilati o eseguiti correttamente. Ad esempio: <#if (i>10)#> Number is: <#= i #>.Questo codice restituisce sempre il valore di i. Solo "Number is:" è un'espressione condizionale. |
In C# usare sempre parentesi graffe per racchiudere i blocchi di testo incorporati nelle istruzioni di controllo. | Aggiungi parentesi graffe: <#if (i>10) { #> Number is: <#= i #><# } #>. |
| "Espressione troppo complessa" durante l'elaborazione di un modello in fase di progettazione o la compilazione di un modello di runtime (pre-elaborato). Visual Studio smette di funzionare quando si tenta di esaminare il codice generato da un modello di runtime. |
Blocco di testo troppo lungo. T4 converte i blocchi di testo in un'espressione di concatenazione di stringhe, con una stringa letterale per ciascuna riga del modello. I blocchi di testo molto lunghi possono superare i limiti delle dimensioni del compilatore. | Suddividere il blocco di testo lungo con un blocco di espressioni, ad esempio:<#= "" #> |
Descrizioni e correzioni degli avvisi
Nella tabella seguente sono elencati gli avvisi più comuni insieme alle correzioni, se disponibili.
| Messaggio di avviso | Description | Soluzione |
|---|---|---|
| Il caricamento del file di inclusione '{0}' ha restituito una stringa null o vuota. | Si verifica se un file di modello di testo incluso è vuoto. Il messaggio fornisce il nome file del file incluso. | Rimuovere la direttiva include o assicurarsi che il file abbia contenuto. |
| Compilazione della trasformazione | Antepone questa stringa a tutti gli errori o gli avvisi provenienti dal compilatore quando compila la trasformazione. Questa stringa indica che il compilatore ha generato un errore o un avviso. | Se si verifica un problema durante la ricerca della DLL, potrebbe essere necessario specificare il percorso completo o un nome sicuro completo se la DLL si trova nella GAC. |
| Il parametro '{0}' esiste già nella direttiva . Il parametro duplicato verrà ignorato. | Si verifica quando un parametro viene specificato più volte in una direttiva. Il messaggio fornisce il nome del parametro e il numero di riga della direttiva. | Rimuovere la specifica del parametro duplicato. |
| Errore durante il caricamento del file di inclusione '{0}'. La direttiva include sarà ignorata. | Si verifica quando non è possibile trovare un file specificato in una include direttiva . Il messaggio fornisce il nome del file e il numero di riga della direttiva. |
Assicurarsi che il file di inclusione esista nella stessa directory del file modello di testo originale o in una delle directory di inclusione registrate con l'host. |
| È stata specificata una classe base non valida per la classe Transformation. La classe base deve derivare da Microsoft.VisualStudio.TextTemplating.TextTransformation. | Si verifica quando il inherits parametro in una direttiva modello specifica una classe che non eredita da TextTransformation. Il messaggio fornisce il numero di riga della direttiva modello. |
Specificare una classe che deriva da TextTransformation. |
| Una cultura non valida è stata specificata nella direttiva 'template'. La cultura deve essere nel formato "xx-XX". Verrà utilizzata la cultura invariante. | Si verifica quando il parametro cultura in una direttiva modello viene specificato in modo non corretto. Il messaggio fornisce il numero di riga della direttiva modello. | Modificare il parametro delle impostazioni cultura a una cultura valida nel formato "xx-XX". |
| Nella direttiva modello è stato specificato un valore di debug '{0}' non valido. Il valore di debug deve essere "vero" o "falso". Verrà usato il valore predefinito "false". | Si verifica quando il debug parametro in una direttiva modello viene specificato in modo non corretto. Il messaggio fornisce il numero di riga della direttiva modello. |
Impostare il parametro di debug su "true" o "false". |
| Nella direttiva modello è stato specificato un valore HostSpecific '{0}' non valido. Il valore HostSpecific deve essere "true" o "false". Verrà usato il valore predefinito "false". | Si verifica quando il parametro specifico dell'host in una template direttiva viene specificato in modo non corretto. Il messaggio fornisce il numero di riga della direttiva modello. |
Impostare il parametro specifico dell'host su "true" o "false". |
| La lingua '{0}' non valida è stata specificata nella direttiva 'template'. Il linguaggio deve essere "C#" o "VB". Verrà usato il valore predefinito "C#". | Si verifica quando nella direttiva viene specificata template una lingua non supportata. Sono consentiti solo "C#" o "VB" (senza distinzione tra maiuscole e minuscole). Il messaggio fornisce il numero di riga della direttiva modello. |
Impostare il language parametro nella direttiva modello su "C#" o "VB". |
| Nel modello sono state trovate più direttive di output. Tutti tranne il primo verranno ignorati. | Si verifica quando vengono specificate più output direttive in un file modello. Il messaggio indica il numero di riga relativo alla direttiva di output duplicata. |
Rimuovere le direttive duplicate output . |
| Nel modello sono state trovate più direttive di modello. Tutti eccetto il primo verranno ignorati. È necessario specificare più parametri per la direttiva modello all'interno di una direttiva modello. | Si verifica se si specificano più template direttive all'interno di un file modello di testo (inclusi i file inclusi). Il messaggio fornisce il numero di riga della direttiva del modello duplicato. |
Aggregare le diverse template direttive in una template direttiva. |
| Non è stato specificato alcun processore per una direttiva denominata '{0}'. La direttiva verrà ignorata. | Si verifica se specifichi una direttiva custom, ma non un attributo processor. Il messaggio fornisce il nome della direttiva e il numero di riga. |
Specificare un processor attributo con il nome del directive processore per la direttiva . |
| Impossibile trovare un processore denominato '{0}' per la direttiva denominata '{1}'. La direttiva verrà ignorata. | Si verifica quando il sistema non riesce a trovare il directive processore specificato all'interno di una custom direttiva. Il messaggio fornisce il nome della direttiva, il nome del processore e il numero di riga della direttiva. |
Impostare l'attributo processor nella direttiva sul nome del processore di direttiva. |
| Impossibile trovare un parametro obbligatorio '{0}' per la direttiva '{1}'. La direttiva verrà ignorata. | Si verifica quando il sistema non fornisce un parametro di direttiva obbligatorio. Il messaggio fornisce il nome del parametro mancante, il nome della direttiva e il numero di riga. | Specificare 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 che causa l'errore insieme al nome del processore di direttiva. | Correggere il nome della direttiva. |
| La direttiva include per il file '{0}' causa un ciclo infinito. | Viene visualizzato se vengono specificate direttive di inclusione circolari (ad esempio, il file A include il file B, che include il file A). | Non specificare direttive di inclusione circolare. |
| Trasformazione In esecuzione: | Antepone questa stringa a tutti gli errori o gli avvisi generati durante l'esecuzione della trasformazione. | Non applicabile. |
| È stato trovato un tag di inizio o di fine imprevisto all'interno di un blocco. Assicurarsi che non sia stato digitato in modo non valido un tag di inizio o di fine e che non siano presenti blocchi annidati nel modello. | Visualizzato quando è presente un <# o #> imprevisto. Ovvero, se si ha un <oggetto # dopo un altro tag aperto che non è stato chiuso o si ha un oggetto #> quando non è presente alcun tag aperto non chiuso prima di esso. Il messaggio fornisce il numero di riga del tag non corrispondente. | Rimuovere il tag iniziale o finale non corrispondente oppure usare un carattere di escape. |
È stata specificata una direttiva nel formato errato. La direttiva verrà ignorata. Specificare la 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 siano nel formato <#@ name [parametername="parametervalue"]* #>. Per altre informazioni, vedere Direttive per i modelli di testo T4. |
| Impossibile caricare l'assembly '{0}' per il processore di direttiva registrato '{1}' {2} |
Si verifica quando non è stato possibile caricare un processore di direttiva 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 esista. |
| Impossibile trovare il tipo '{0}' nell'assembly '{1}' per il processore di direttiva registrato '{2}' {3} |
Si verifica quando non è stato possibile caricare un tipo di processore di direttiva dal relativo assembly. Il messaggio fornisce il nome del tipo, dell'assembly e del processore di direttiva. | Vshost trova le 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 esista nell'assembly. |
| Si è verificato un problema durante il caricamento dell'assembly '{0}' | Si presenta quando si verifica un problema durante il caricamento di un assembly. Il messaggio fornisce il nome dell'assembly. | È possibile specificare gli assembly da caricare nelle <direttive @#assembly#> e nei processori di direttiva. Il messaggio di errore che segue questa stringa deve fornire altri dati sul motivo per cui il caricamento dell'assembly non è riuscito. |
| Si è verificato un problema durante la creazione e l'inizializzazione del processore per una direttiva denominata "{1}". Il tipo del processore è {0}. La direttiva verrà ignorata. | Si verifica quando il sistema non è riuscito a 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 usare il processore di direttiva corretto e che il processore di direttiva abbia un costruttore predefinito pubblico. In caso contrario, usare le opzioni di debug per scoprire perché il metodo Initialize() del processore di direttiva ha esito negativo. Per altre informazioni, vedere Risoluzione dei problemi relativi ai modelli di testo. |
| Eccezione generata durante l'elaborazione di una direttiva denominata '{0}'. | Si verifica quando un processore di direttiva genera un'eccezione durante l'elaborazione di una direttiva. | Assicurarsi che i parametri del processore di direttiva siano corretti. |
| L'host ha generato 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 di riferimento dell'assembly. | I riferimenti agli assembly provengono dalle direttive <@#assembly#> e dai processori di direttiva. Assicurarsi che il parametro 'name' fornito nel parametro assembly sia corretto. |
| Tentativo di specificare il valore non supportato {1} '{0}' per la direttiva {2} | Si verifica per RequiresProvidesDirectiveProcessor (tutti i nostri processori di direttive generati derivano da esso), quando si specifica un argomento 'requires' o 'provides' non supportato. | Assicurarsi che i nomi nelle coppie "name='value'" fornite nei parametri "requires" e "provides" siano corretti. |