Freigeben über


Exemplarische Vorgehensweise: Debuggen einer Textvorlage, die auf ein Modell zugreift

Wenn Sie Textvorlagen in einer domänenspezifischen Sprachlösung (DSL) ändern oder hinzufügen, kann es zu Fehlern kommen, wenn die Engine die Vorlage in Quellcode umwandelt oder den generierten Code kompiliert. Die folgende exemplarische Vorgehensweise veranschaulicht einige der Möglichkeiten, die Ihnen beim Debuggen einer Textvorlage zur Verfügung stehen.

Hinweis

Weitere Informationen über Textvorlagen im Allgemeinen finden Sie unter Codegenerierung und T4-Textvorlagen. Weitere Informationen zum Debuggen von Textvorlagen finden Sie unter Exemplarische Vorgehensweise: Debuggen einer Textvorlage.

Erstellen einer DSL-Lösung

In diesem Verfahren erstellen Sie eine domänenspezifische Sprachlösung, die die folgenden Merkmale aufweist:

Erstellen einer Textvorlage

Fügen Sie Ihrer Projektmappe eine Textvorlage hinzu.

So erstellen Sie eine Textvorlage

  1. Erstellen Sie die Projektmappe, und starten Sie die Ausführung im Debugger. (Klicken Sie im Menü Erstellen auf Projektmappe neu erstellen und dann im Menü Debuggen auf Debuggen starten.) Das Debugprojekt wird in einer neuen Instanz von Visual Studio geöffnet.

  2. Fügen Sie dem Debugprojekt eine Textdatei mit dem Namen DebugTest.tt hinzu.

  3. Stellen Sie sicher, dass die Eigenschaft Benutzerdefiniertes Tool von „DebugTest.tt“ auf TextTemplatingFileGenerator festgelegt ist.

Debuganweisungen, die auf ein Modell aus einer Textvorlage zugreifen

Bevor Sie über die Anweisungen und Ausdrücke in einer Textvorlage auf ein Modell zugreifen können, müssen Sie zunächst einen generierten Anweisungsprozessor aufrufen. Der Aufruf des generierten Anweisungsprozessors macht die Klassen in Ihrem Modell als Eigenschaften für den Textvorlagencode verfügbar. Weitere Informationen finden Sie unter Zugreifen auf Modelle über Textvorlagen.

In den folgenden Verfahren debuggen Sie einen falschen Anweisungsnamen und einen falschen Eigenschaftennamen.

So debuggen Sie einen falschen Anweisungsnamen

  1. Ersetzen Sie den Code in „DebugTest.tt“ durch den folgenden Code:

    Hinweis

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

    <#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#>
    <#@ output extension=".txt" #>
    <#@ modelRoot processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
    Model: <#= this.ExampleModel #>
    <#
    foreach (ExampleElement element in this.ExampleModel.Elements)
    {
    #>
        Element: <#= element.Name #>
    <#
    }
    #>
    
  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf „DebugTest.tt“ und dann auf Benutzerdefiniertes Tool ausführen.

    Im Fenster Fehlerliste wird dieser Fehler angezeigt:

    Der Prozessor 'DebuggingTestLanguageDirectiveProcessor' bietet keine Unterstützung für die Anweisung 'modelRoot'. Die Transformation wird nicht ausgeführt.

    In diesem Fall enthält der Aufruf der Anweisung einen falschen Anweisungsnamen. Sie haben modelRoot als Anweisungsnamen angegeben, aber der richtige Name der Anweisung lautet DebuggingTestLanguage.

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

  4. Um den Code zu korrigieren, ändern Sie den Namen der Anweisung in DebuggingTestLanguage.

    Die Änderung ist hervorgehoben.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf „DebugTest.tt“ und dann auf Benutzerdefiniertes Tool ausführen.

    Nun wandelt das System die Textvorlage um und generiert die entsprechende Ausgabedatei. Im Fenster Fehlerliste werden keine Fehler angezeigt.

So debuggen Sie einen falschen Eigenschaftennamen

  1. Ersetzen Sie den Code in „DebugTest.tt“ durch den folgenden Code:

    Hinweis

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

    <#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#>
    <#@ output extension=".txt" #>
    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
    Model: <#= this.ExampleModel #>
    <#
    foreach (ExampleElement element in this.ExampleModel.Elements)
    {
    #>
        Element: <#= element.Name #>
    <#
    }
    #>
    
  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf „DebugTest.tt“ und dann auf Benutzerdefiniertes Tool ausführen.

    Das Fenster Fehlerliste wird angezeigt und zeigt einen der folgenden Fehler an:

    (C#)

    Kompilieren der Transformation: Microsoft.VisualStudio.TextTemplating<GUID>. 'GeneratedTextTransformation' enthält keine Definition für 'ExampleModel'.

    (Visual Basic)

    Kompilieren der Transformation: 'ExampleModel' ist kein Member von 'Microsoft.VisualStudio.TextTemplating<GUID>.GeneratedTextTransformation'.

    In diesem Fall enthält der Textvorlagencode einen falschen Eigenschaftennamen. Sie haben als Eigenschaftenname ExampleModel angegeben, aber der richtige Eigenschaftenname lautet LibraryModel. Sie finden den richtigen Eigenschaftennamen im Parameter „provides“, wie im folgenden Code gezeigt:

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
  3. Doppelklicken Sie im Fenster „Fehlerliste“ auf den Fehler, um zum Code zu springen.

  4. Um den Code zu korrigieren, ändern Sie den Eigenschaftennamen im Code der Textvorlage in LibraryModel.

    Die Änderungen werden hervorgehoben.

    <#@ template language="C#" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation"#>
    <#@ output extension=".txt" #>
    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
    Model: <#= this.LibraryModel #>
    <#
    foreach (ExampleElement element in this.LibraryModel.Elements)
    {
    #>
        Element: <#= element.Name #>
    <#
    }
    #>
    
  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf „DebugTest.tt“ und dann auf Benutzerdefiniertes Tool ausführen.

    Nun wandelt das System die Textvorlage um und generiert die entsprechende Ausgabedatei. Im Fenster Fehlerliste werden keine Fehler angezeigt.