Condividi tramite


Procedura dettagliata: debug di un modello di testo che accede a un modello

Quando si modificano o si aggiungono modelli di testo in una soluzione di linguaggio specifica del dominio, è possibile che si verifichino errori quando il motore trasforma il modello in codice sorgente o quando compila il codice generato. La procedura dettagliata seguente illustra alcune delle operazioni che è possibile eseguire per eseguire il debug di un modello di testo.

Nota

Per altre informazioni sui modelli di testo in generale, vedere Generazione di codice e modelli di testo T4. Per altre informazioni sul debug dei modelli di testo, vedere Procedura dettagliata: Debug di un modello di testo.

Creazione di una soluzione di linguaggio specifica del dominio

In questa procedura viene creata una soluzione di linguaggio specifica del dominio con le caratteristiche seguenti:

  • Nome: DebuggingTestLanguage

  • Modello di soluzione: linguaggio minimo

  • Estensione del file: .ddd

  • Nome società: Fabrikam

    Per altre informazioni sulla creazione di una soluzione di linguaggio specifica del dominio, vedere Procedura: Creare una soluzione di linguaggio specifica del dominio.

Creazione di un modello di testo

Aggiungere un modello di testo alla soluzione.

Per creare un modello di testo

  1. Compilare la soluzione e avviare l'esecuzione nel debugger. (In Menu Compila, fare clic su Ricompila soluzione, quindi scegliere Avvia debug dal menu Debug. Una nuova istanza di Visual Studio apre il progetto debug.

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

  3. Assicurarsi che la proprietà Custom Tool di DebugTest.tt sia impostata su TextTemplatingFileGenerator.

Direttive di debug che accedono a un modello di testo

Prima di poter accedere a un modello dalle istruzioni e dalle espressioni in un modello di testo, è necessario chiamare un processore di direttiva generato. La chiamata del processore di direttiva generata rende le classi nel modello disponibili per il codice del modello di testo come proprietà. Per altre informazioni, vedere Accesso ai modelli da modelli di testo.

Nelle procedure seguenti si eseguirà il debug di un nome di direttiva non corretto e di un nome di proprietà non corretto.

Per eseguire il debug di un nome di direttiva non corretto

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

    Nota

    Il codice contiene un errore. Si sta introducendo l'errore per eseguirne il debug.

    <#@ 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. In Esplora soluzioni fare clic con il pulsante destro del mouse su DebugTest.tt e quindi scegliere Esegui strumento personalizzato.

    Nella finestra Elenco errori viene visualizzato questo errore:

    Il processore denominato "DebuggingTestLanguageDirectiveProcessor" non supporta la direttiva denominata "modelRoot". La trasformazione non verrà eseguita.

    In questo caso, la chiamata di direttiva contiene un nome di direttiva non corretto. È stato specificato modelRoot come nome della direttiva, ma il nome della direttiva corretto è DebuggingTestLanguage.

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

  4. Per correggere il codice, modificare il nome della direttiva in DebuggingTestLanguage.

    La modifica è evidenziata.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
  5. In Esplora soluzioni fare clic con il pulsante destro del mouse su DebugTest.tt e quindi scegliere Esegui strumento personalizzato.

    Il sistema trasforma ora il modello di testo e genera il file di output corrispondente. Nella finestra Elenco errori non verranno visualizzati errori.

Per eseguire il debug di un nome di proprietà non corretto

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

    Nota

    Il codice contiene un errore. Si sta introducendo l'errore per eseguirne il debug.

    <#@ 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. In Esplora soluzioni fare clic con il pulsante destro del mouse su DebugTest.tt e quindi scegliere Esegui strumento personalizzato.

    Viene visualizzata la finestra Elenco errori e viene visualizzato uno di questi errori:

    (C#)

    Trasformazione compilazione: Microsoft.VisualStudio.TextTemplating<GUID>. GeneratedTextTransformation' non contiene una definizione per 'ExampleModel'

    (Visual Basic)

    Trasformazione compilazione: 'ExampleModel' non è un membro del GUID> 'Microsoft.VisualStudio.TextTemplating<. GeneratedTextTransformation'.

    In questo caso, il codice del modello di testo contiene un nome di proprietà non corretto. È stato specificato ExampleModel come nome della proprietà, ma il nome della proprietà corretto è LibraryModel. È possibile trovare il nome corretto della proprietà nel parametro fornisce , come illustrato nel codice seguente:

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
  3. Fare doppio clic sull'errore nella finestra Elenco errori per passare al codice.

  4. Per correggere il codice, modificare il nome LibraryModel della proprietà in nel codice del modello di testo.

    Le modifiche sono evidenziate.

    <#@ 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. In Esplora soluzioni fare clic con il pulsante destro del mouse su DebugTest.tt e quindi scegliere Esegui strumento personalizzato.

    Il sistema trasforma ora il modello di testo e genera il file di output corrispondente. Nella finestra Elenco errori non verranno visualizzati errori.