Condividi tramite


Procedura dettagliata: debug di un modello di testo

Prima di poter eseguire il debug di un modello di testo, è necessario capire i due passaggi del processo di trasformazione del modello. Durante ciascun passaggio si possono verificare due differenti classi di errori. I passaggi sono i seguenti:

  1. Dal motore di trasformazione del modello di testo viene creata una classe denominata classe della trasformazione generata. Per creare la classe della trasformazione generata, il motore di trasformazione del modello di testo deve essere in grado di analizzare il modello di testo.

    In questo passaggio, eventuali errori nel modello di testo, quali dei tag errati, possono impedire l'analisi. Gli errori vengono segnalati con il numero di riga corretto del modello di testo.

  2. La classe della trasformazione generata viene compilata ed eseguita dal motore.

    In questo passaggio, eventuali errori nel codice possono impedire la compilazione della classe della trasformazione generata. La maggior parte degli errori viene segnalata con il numero di riga corretto del modello di testo. La mancanza di corrispondenza delle parentesi nel codice del modello possono provocare errori riferiti alla classe trasformata, che dispone di un nome di file temporaneo.

  3. La classe della trasformazione compilata viene eseguita per generare l'output.

    Gli eventuali errori in questa fase non vengono segnalati con il numero di riga corretto. È possibile avanzare nell'esecuzione del codice del modello, ma è necessario avviare il debug in modo esplicito come descritto più avanti in questo argomento.

Per eseguire il debug di un modello di testo, è necessario innanzitutto correggere gli errori nel modello di testo. Successivamente è necessario correggere gli errori nella classe della trasformazione generata.

Nota

Quando si trasforma un modello di testo, è possibile ottenere degli errori da qualsiasi delle tre origini: il modello di testo, la classe della trasformazione generata e tutte le direttive chiamate dall'interno del modello di testo. In questa procedura dettagliata si eseguirà il debug di errori nel modello di testo e nella classe della trasformazione generata. Queste procedure possono comunque essere utilizzare anche per eseguire il debug di direttive personalizzate.

Di seguito vengono illustrate le attività incluse nella procedura dettagliata:

  • Esecuzione del debug di un tag errato del modello di testo

  • Avanzamento nel codice del modello

Creazione di un modello di testo

Creare un progetto di applicazione console in C# e aggiungere un modello di testo alla soluzione. Si eseguirà il debug di questo modello di testo più avanti.

Per creare un modello di testo

  1. In Visual Studio, creare una nuova applicazione console in C# e denominarla DebugTemplate.

  2. Aggiungere un file modello di testo denominato DebugTest.tt al progetto DebugTemplate.

  3. Assicurarsi che la proprietà Strumento personalizzato di DebugTest.tt sia impostata su TextTemplatingFileGenerator.

  4. Modificare il file per contenere solo la riga seguente:

    <#@ output extension=".txt" #> 
    
  5. Salvare il file.

    Il modello di testo viene trasformato e viene generato il file di output corrispondente. Il nuovo file viene visualizzato in Esplora soluzioni sotto il file modello di testo.

Debug di un tag errato del modello di testo

Un errore di sintassi comune quando si scrivono modelli di testo è l'utilizzo di un tag di inizio o di fine errato. In questa procedura, si eseguirà il debug di un tag errato.

Per eseguire il debug di un tag errato del modello di testo

  1. Aggiungere il codice seguente al file DebugTest.tt:

    Nota

    Il codice contiene un errore che è stato introdotto apposta per eseguirne il debug.

    <# for (int i = 0; i < 3; i++) { >
    Hello, World!
    <# } #>
    
  2. Salvare il file.

    Nella finestra Elenco errori viene visualizzato questo errore:

    Trovato inizio imprevisto o tag di fine 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.

    In questo caso, l'errore nel codice è un tag di fine errato. Manca # nel tag di fine.

  3. Fare doppio clic sull'errore nella finestra Elenco errori per passare al punto errato nel codice.

  4. Per correggere il codice, aggiungere il carattere # al tag di fine.

    <# for (int i = 0; i < 3; i++) { #>
    
  5. Salvare il file.

    A questo punto, il modello di testo viene trasformato e viene generato il file di output corrispondente. Nella finestra Elenco errori non sono presenti errori.

Avanzamento nel codice del modello

Per avanzare nel codice del modello, è necessario aggiungervi due elementi:

  • <@#template debug="true" #>

  • System.Diagnostics.Debugger.Launch();

Nella procedura riportata di seguito, si eseguirà il debug di un indice di elemento che non esiste. Questo errore è simile agli errori delle procedure precedenti. Questa volta tuttavia si eseguirà il debug utilizzando il debugger di Visual Studio.

Per eseguire il debug utilizzando il debugger

  1. Creare una cartella C:\nonsense e salvare in questa cartella un file di testo vuoto denominato nonsense.xml.

  2. Sostituire il codice in DebugTest.tt con il codice seguente:

    Nota

    Il codice contiene un errore che è stato introdotto apposta per eseguirne il debug.

    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#
    XmlDocument xDoc = new XmlDocument();
       xDoc.Load(@"C:\nonsense\nonsense.xml");
       XmlAttributeCollection attributes = xDoc.Attributes;
       if (attributes != null)
       {
          foreach (XmlAttribute attr in attributes)
          { #>
           <#=  attr.Name #>
       <# }
       }
       #>
    
  3. Salvare il file.

    Nella finestra Elenco errori viene visualizzato il seguente errore:

    Esecuzione della trasformazione: System.Xml.XmlException: Root element mancante.

  4. Aggiungere una direttiva template con il parametro debug impostato su true:

    <#@ template debug="true" #>
    
  5. Aggiungere un'istruzione System.Diagnostics.Debugger.Launch() al codice del modello di testo.

    Il codice risulterà simile al seguente:

    <#@ template debug="true" #>
    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#
       XmlDocument xDoc = new XmlDocument();
       System.Diagnostics.Debugger.Launch();
       xDoc.Load(@"C:\nonsense\nonsense.xml");
       XmlAttributeCollection attributes = xDoc.Attributes;
       if (attributes != null)
       { 
          foreach (XmlAttribute attr in attributes)
          { #>
           <#=  attr.Name #>
       <# }
       }
     #> 
    
  6. Eseguire nuovamente la trasformazione.

    Verrà visualizzata la finestra di dialogo Debugger JIT di Visual Studio.

  7. Nell'elenco Debugger disponibili fare clic su Nuova istanza di Visual Studio 2010, quindi fare clic su .

    Verrà aperto il file DebugTest.tt in una nuova istanza di Visual Studio. 

  8. Avanzare nel codice alla riga:

    xDoc.Load(@"C:\nonsense\nonsense.xml");
    
  9. L'errore verrà generato in corrispondenza di questa riga.

  10. Chiudere la seconda istanza di Visual Studio.

    1. Scegliere Termina debug dal menu Debug.

    2. Scegliere Esci dal menu File.

    3. Alla richiesta di salvare le modifiche alla soluzione, fare clic su No.

      Verrà chiusa la seconda istanza di Visual Studio.

  11. Correggere il modello di testo e rimuovere le funzionalità di debug.

    1. In Esplora soluzioni, fare doppio clic su DebugTest.tt per aprirlo nell'editor.

    2. Correggere il nome file errato. Sostituirlo ad esempio con:

      @"C:\\Program Files\\Microsoft Visual Studio 10.0\\Xml\\SnippetsIndex.xml"

    3. Rimuovere la direttiva template e l'interruzione di riga.

      Il modello di testo avrà un aspetto simile al seguente:

      <#@ output extension=".txt" #>
      <#@ assembly name="System.Xml.dll" #>
      <#@ import namespace="System.Xml" #>
      <#
          XmlDocument xDoc = new XmlDocument();
          xDoc.Load(@"C:\Program Files\Microsoft Visual Studio 10.0\Xml\SnippetsIndex.xml");
          foreach (XmlNode node in xDoc.SelectNodes("//*"))
          {  #>
             <#= node.Name #>
         <#  }
      #>
      

Salvare il file DebugTest.tt. Verificare che non vi siano errori e che nel file .txt risultante siano elencati i nomi dei nodi presenti nel file XML.

Vedere anche

Riferimenti

Avvisi ed errori comuni durante l'utilizzo di modelli di testo