Sdílet prostřednictvím


Návod: Ladění textové šablony přistupující k modelu

Když upravíte nebo přidáte textové šablony v řešení jazyka specifické pro doménu, může dojít k chybám při transformaci šablony na zdrojový kód nebo při kompilaci vygenerovaného kódu. Následující názorný postup ukazuje některé z věcí, které můžete udělat při ladění textové šablony.

Poznámka:

Další informace o textovýchšablonch Další informace o ladění textových šablon naleznete v tématu Návod: Ladění textové šablony.

Vytvoření jazykového řešení specifického pro doménu

V tomto postupu vytvoříte řešení jazyka specifického pro doménu, které má následující charakteristiky:

  • Název: DebuggingTestLanguage

  • Šablona řešení: Minimální jazyk

  • Přípona souboru: .ddd

  • Název společnosti: Fabrikam

    Další informace o vytvoření jazykového řešení specifického pro doménu najdete v tématu Postupy: Vytvoření jazykového řešení specifického pro doménu.

Vytvoření textové šablony

Přidejte do svého řešení textovou šablonu.

Vytvoření textové šablony

  1. Sestavte řešení a začněte ho spouštět v ladicím programu. (Na kartě Nabídka Sestavení , klepněte na tlačítko Znovu sestavit řešení a potom v nabídce Ladění klepněte na tlačítko Spustit ladění.) Nová instance sady Visual Studio otevře projekt ladění.

  2. Přidejte textový soubor s názvem DebugTest.tt do projektu ladění.

  3. Ujistěte se, že vlastnost Vlastní nástroj DebugTest.tt je nastavena na TextTemplatingFileGeneratorhodnotu .

Direktivy ladění, které přistupuje k modelu z textové šablony

Než budete mít přístup k modelu z příkazů a výrazů v textové šabloně, musíte nejprve volat vygenerovaný procesor direktiv. Volání vygenerovaného procesoru direktiv zpřístupňuje třídy v modelu kódu textové šablony jako vlastnosti. Další informace najdete v tématu Přístup k modelům z textových šablon.

V následujících postupech budete ladit nesprávný název direktivy a nesprávný název vlastnosti.

Ladění nesprávného názvu direktivy

  1. Nahraďte kód v DebugTest.tt následujícím kódem:

    Poznámka:

    Kód obsahuje chybu. Zavádíte chybu, abyste ji mohli ladit.

    <#@ 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. V Průzkumník řešení klepněte pravým tlačítkem na DebugTest.tt a potom klepněte na příkaz Spustit vlastní nástroj.

    V okně Seznam chyb se zobrazí tato chyba:

    Procesor s názvem DebuggingTestLanguageDirectiveProcessor nepodporuje direktivu s názvem modelRoot. Transformace se nespustí.

    V tomto případě volání direktivy obsahuje nesprávný název direktivy. Zadali modelRoot jste název direktivy, ale správný název direktivy je DebuggingTestLanguage.

  3. Poklikejte na chybu v okně Seznam chyb a přejděte na kód.

  4. Chcete-li opravit kód, změňte název direktivy na DebuggingTestLanguage.

    Změna je zvýrazněná.

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=ExampleModel" #>
    
  5. V Průzkumník řešení klepněte pravým tlačítkem na DebugTest.tt a potom klepněte na příkaz Spustit vlastní nástroj.

    Systém teď transformuje textovou šablonu a vygeneruje odpovídající výstupní soubor. V okně Seznam chyb se nezobrazí žádné chyby.

Ladění nesprávného názvu vlastnosti

  1. Nahraďte kód v DebugTest.tt následujícím kódem:

    Poznámka:

    Kód obsahuje chybu. Zavádíte chybu, abyste ji mohli ladit.

    <#@ 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. V Průzkumník řešení klepněte pravým tlačítkem na DebugTest.tt a potom klepněte na příkaz Spustit vlastní nástroj.

    Zobrazí se okno Se seznamem chyb a zobrazí se jedna z těchto chyb:

    (C#)

    Kompilace transformace: Microsoft.VisualStudio.TextTemplating<GUID>. GeneratedTextTransformation neobsahuje definici ExampleModel.

    (Visual Basic)

    Kompilace transformace: ExampleModel není členem guid> Microsoft.VisualStudio.TextTemplating<. GeneratedTextTransformation'

    V tomto případě obsahuje kód textové šablony nesprávný název vlastnosti. Zadali ExampleModel jste jako název vlastnosti, ale správný název vlastnosti je LibraryModel. Správný název vlastnosti najdete v parametru, jak je znázorněno v následujícím kódu:

    <#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
    
  3. Poklikejte na chybu v okně Seznam chyb a přejděte na kód.

  4. Chcete-li kód opravit, změňte název vlastnosti na LibraryModel v kódu textové šablony.

    Změny jsou zvýrazněné.

    <#@ 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. V Průzkumník řešení klepněte pravým tlačítkem na DebugTest.tt a potom klepněte na příkaz Spustit vlastní nástroj.

    Systém teď transformuje textovou šablonu a vygeneruje odpovídající výstupní soubor. V okně Seznam chyb se nezobrazí žádné chyby.