Freigeben über


Exemplarische Vorgehensweise: Debuggen einer Textvorlage

Das Debuggen einer Textvorlage setzt das Verständnis der zwei Schritte voraus, aus denen der Vorlagentransformationsprozess besteht. In jedem Schritt können andere Fehlerklassen auftreten. Die Schritte werden im Folgenden beschrieben.

  1. Das Textvorlagen-Transformationsmodul erstellt eine als generierte Transformationsklasse bezeichnete Klasse. Zum Erstellen der generierten Transformationsklasse muss das Textvorlagen-Transformationsmodul in der Lage sein, die Textvorlage zu analysieren.

    In diesem Schritt kann die Analyse durch Fehler in der Textvorlage (z. B. falsche Tags) verhindert werden. Fehler werden mit der richtigen Textvorlagen-Zeilennummer gemeldet.

  2. Das Modul kompiliert die generierte Transformationsklasse.

    In diesem Schritt kann die Kompilierung der generierten Transformationsklasse durch Codefehler verhindert werden. Die meisten Fehler werden mit der richtigen Textvorlagen-Zeilennummer gemeldet. Nicht übereinstimmende Klammern im Vorlagencode können Fehler verursachen, durch die anhand eines temporären Dateinamens auf die transformierte Klasse verwiesen wird.

  3. Die kompilierte Transformationsklasse wird ausgeführt, um die Ausgabe zu erzeugen.

    Fehler in dieser Phase werden nicht mit einer korrekten Zeilennummer gemeldet. Sie können den Vorlagencode schrittweise ausführen, müssen den Debugger aber explizit starten. Weitere Informationen dazu finden Sie an späterer Stelle in diesem Thema.

Zum Debuggen einer Textvorlage müssen Sie zuerst die Fehler in der Textvorlage korrigieren. Anschließend müssen Sie die Fehler in der generierten Transformationsklasse korrigieren.

Tipp

Beim Transformieren einer Textvorlage können Fehler in den folgenden drei Komponenten angezeigt werden: Textvorlage, generierte Transformationsklasse und beliebige Direktiven, die innerhalb der Textvorlage aufgerufen werden. In dieser exemplarischen Vorgehensweise debuggen Sie Fehler in der Textvorlage und der generierten Transformationsklasse. Sie können anhand dieser Verfahren jedoch auch benutzerdefinierte Direktiven debuggen.

In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben beschrieben:

  • Debuggen eines falschen Textvorlagentags

  • Schrittweise Ausführung des Vorlagencodes

Erstellen einer Textvorlage

Erstellen Sie ein C#-Konsolenanwendungsprojekt, und fügen Sie der Projektmappe eine Textvorlage hinzu. Diese Textvorlage wird in späteren Schritten gedebuggt.

So erstellen Sie eine Textvorlage

  1. Erstellen Sie in Visual Studio eine neue C#-Konsolenanwendung mit dem Namen "DebugTemplate".

  2. Fügen Sie dem Projekt "DebugTemplate" eine Textvorlagendatei namens DebugTest.tt hinzu.

  3. Vergewissern Sie sich, dass die Eigenschaft Benutzerdefiniertes Tool von "DebugTest.tt" auf TextTemplatingFileGenerator festgelegt ist.

  4. Bearbeiten Sie die Datei, sodass sie nur die folgende Zeile enthält:

    <#@ output extension=".txt" #> 
    
  5. Speichern Sie die Datei.

    Das System transformiert die Textvorlage und generiert die entsprechende Ausgabedatei. Die neue Datei wird im Projektmappen-Explorer unter der Textvorlagendatei angezeigt.

Debuggen eines falschen Textvorlagentags

Ein häufiger Syntaxfehler beim Schreiben von Textvorlagen ist die Verwendung eines falschen Start- oder Endtags. In diesem Verfahren debuggen Sie ein falsches Tag.

So debuggen Sie ein falsches Textvorlagentag

  1. Fügen Sie "DebugTest.tt" den folgenden Code hinzu:

    Tipp

    Der Code enthält einen Fehler. Sie führen den Fehler absichtlich ein, um ihn zu debuggen.

    <# for (int i = 0; i < 3; i++) { >
    Hello, World!
    <# } #>
    
  2. Speichern Sie die Datei.

    Das Fenster Fehlerliste wird geöffnet, und der folgende Fehler wird angezeigt:

    Ein unerwartetes Start- oder Endtag wurde in einem Block gefunden. Stellen Sie sicher, dass Sie ein Start- bzw. Endtag richtig eingegeben haben und dass sich in der Vorlage keine geschachtelten Blöcke befinden.

    In diesem Fall handelt es sich bei dem Fehler im Code um ein falsches Endtag. Das # im Endtag fehlt.

  3. Doppelklicken Sie im Fenster Fehlerliste auf den Fehler, um zum Code zu springen.

  4. Fügen Sie dem Endtag # hinzu, um den Code zu korrigieren.

    <# for (int i = 0; i < 3; i++) { #>
    
  5. Speichern Sie die Datei.

    Nun transformiert das System die Textvorlage, und die entsprechende Ausgabedatei wird generiert. Im Fenster Fehlerliste werden keine Fehler angezeigt.

Schrittweise Ausführung des Vorlagencodes

Zum schrittweisen Ausführen von Vorlagencode müssen der Vorlage zwei Elemente hinzugefügt werden:

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

  • System.Diagnostics.Debugger.Launch();

Im folgenden Verfahren debuggen Sie einen Elementindex, der nicht vorhanden ist. Dieser Fehler ähnelt den Fehlern in den vorhergehenden Verfahren. In diesem Fall debuggen Sie den Fehler jedoch mit dem Visual Studio-Debugger.

So debuggen Sie mithilfe des Debuggers

  1. Erstellen Sie einen Ordner "C:\nonsense", und speichern Sie dann eine leere Textdatei mit dem Namen "nonsense.xml" in diesem Ordner

  2. Ersetzen Sie den Code in "DebugTest.tt" durch den folgenden Code:

    Tipp

    Der Code enthält einen Fehler. Sie führen den Fehler absichtlich ein, um ihn zu debuggen.

    <#@ 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. Speichern Sie die Datei.

    Das Fenster Fehlerliste wird geöffnet, und folgender Fehler wird angezeigt:

    Ausführen von Transformation: System.Xml.XmlException: Stammelement fehlt.

  4. Fügen Sie eine template-Direktive hinzu, in der der debug-Parameter auf true festgelegt ist:

    <#@ template debug="true" #>
    
  5. Fügen Sie dem Textvorlagencode eine System.Diagnostics.Debugger.Launch()-Anweisung hinzu.

    Der Code sieht wie folgt aus:

    <#@ 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. Führen Sie die Transformation erneut aus.

    Das Dialogfeld Just-In-Time-Debugger von Visual Studio wird geöffnet.

  7. Klicken Sie in der Liste Mögliche Debugger auf Neue Instanz von Visual Studio 2010 und dann auf Ja.

    "DebugTest.tt" wird in einer neuen Instanz von Visual Studio geöffnet. 

  8. Führen Sie den Code schrittweise bis zur folgenden Zeile aus:

    xDoc.Load(@"C:\nonsense\nonsense.xml");
    
  9. Der Fehler wird in dieser Zeile ausgelöst.

  10. Schließen Sie die zweite Instanz von Visual Studio.

    1. Klicken Sie im Menü Debuggen auf Debuggen beenden.

    2. Klicken Sie im Menü Datei auf Beenden.

    3. Klicken Sie auf Nein, wenn Sie aufgefordert werden, die Änderungen an der Projektmappe zu speichern.

      Die zweite Instanz von Visual Studio wird geschlossen.

  11. Korrigieren Sie die Textvorlage, und entfernen Sie die Debugfunktionen.

    1. Doppelklicken Sie im Projektmappen-Explorer auf "DebugTest.tt", um die Datei im Editor zu öffnen.

    2. Korrigieren Sie den falschen Dateinamen. Ersetzen Sie ihn z. B. durch folgenden Namen:

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

    3. Entfernen Sie die templat e-Direktive und die Umbruchlinie.

      Die Textvorlage sollte wie folgt aussehen:

      <#@ 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 #>
         <#  }
      #>
      

Speichern Sie "DebugTest.tt". Vergewissern Sie sich, dass keine Fehler vorliegen und die Knotennamen in der XML-Datei in der resultierenden TXT-Datei aufgeführt sind.

Siehe auch

Referenz

Häufige Fehler und Warnungen beim Verwenden von Textvorlagen