Wskazówki: debugowanie szablonu tekstowego uzyskującego dostęp do modelu
Podczas modyfikowania lub dodawania szablonów tekstowych w rozwiązaniu języka specyficznego dla domeny mogą wystąpić błędy, gdy aparat przekształca szablon w kod źródłowy lub kompiluje wygenerowany kod. W poniższym przewodniku przedstawiono niektóre czynności, które można wykonać w celu debugowania szablonu tekstowego.
Uwaga
Aby uzyskać więcej informacji na temat szablonów tekstowych w ogóle, zobacz Generowanie kodu i szablony tekstowe T4. Aby uzyskać więcej informacji na temat debugowania szablonów tekstu, zobacz Przewodnik: debugowanie szablonu tekstowego.
Tworzenie rozwiązania języka specyficznego dla domeny
W tej procedurze utworzysz rozwiązanie języka specyficznego dla domeny, które ma następujące cechy:
Nazwa: DebugowanieTestLanguage
Szablon rozwiązania: minimalny język
Rozszerzenie pliku: ddd
Nazwa firmy: Fabrikam
Aby uzyskać więcej informacji na temat tworzenia rozwiązania języka specyficznego dla domeny, zobacz How to: Create a Domain-Specific Language Solution (Jak utworzyć rozwiązanie języka specyficznego dla domeny).
Tworzenie szablonu tekstowego
Dodaj szablon tekstowy do rozwiązania.
Aby utworzyć szablon tekstowy
Skompiluj rozwiązanie i uruchom je w debugerze. (Na stronie Menu kompilacji, kliknij polecenie Skompiluj rozwiązanie, a następnie w menu Debugowanie kliknij pozycję Rozpocznij debugowanie. Nowe wystąpienie programu Visual Studio otwiera projekt Debugowanie.
Dodaj plik tekstowy o nazwie
DebugTest.tt
do projektu Debugowanie.Upewnij się, że właściwość Niestandardowe narzędzie DebugTest.tt jest ustawiona na
TextTemplatingFileGenerator
wartość .
Dyrektywy debugowania, które uzyskują dostęp do modelu z szablonu tekstowego
Aby uzyskać dostęp do modelu z instrukcji i wyrażeń w szablonie tekstowym, należy najpierw wywołać wygenerowany procesor dyrektywy. Wywołanie wygenerowanego procesora dyrektywy sprawia, że klasy w modelu są dostępne dla kodu szablonu tekstowego jako właściwości. Aby uzyskać więcej informacji, zobacz Uzyskiwanie dostępu do modeli z szablonów tekstowych.
W poniższych procedurach debugujesz nieprawidłową nazwę dyrektywy i nieprawidłową nazwę właściwości.
Aby debugować nieprawidłową nazwę dyrektywy
Zastąp kod w DebugTest.tt następującym kodem:
Uwaga
Kod zawiera błąd. Wprowadzasz błąd, aby go debugować.
<#@ 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 #> <# } #>
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy DebugTest.tt, a następnie kliknij polecenie Uruchom narzędzie niestandardowe.
W oknie Lista błędów zostanie wyświetlony następujący błąd:
Procesor o nazwie "DebugTestLanguageDirectiveProcessor" nie obsługuje dyrektywy o nazwie "modelRoot". Przekształcenie nie zostanie uruchomione.
W tym przypadku wywołanie dyrektywy zawiera nieprawidłową nazwę dyrektywy.
modelRoot
Określono jako nazwę dyrektywy, ale poprawna nazwa dyrektywy toDebuggingTestLanguage
.Kliknij dwukrotnie błąd w oknie Lista błędów, aby przejść do kodu.
Aby poprawić kod, zmień nazwę dyrektywy na
DebuggingTestLanguage
.Zmiana jest wyróżniona.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy DebugTest.tt, a następnie kliknij polecenie Uruchom narzędzie niestandardowe.
Teraz system przekształca szablon tekstowy i generuje odpowiedni plik wyjściowy. W oknie Lista błędów nie będą widoczne żadne błędy.
Aby debugować nieprawidłową nazwę właściwości
Zastąp kod w DebugTest.tt następującym kodem:
Uwaga
Kod zawiera błąd. Wprowadzasz błąd, aby go debugować.
<#@ 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 #> <# } #>
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy DebugTest.tt, a następnie kliknij polecenie Uruchom narzędzie niestandardowe.
Zostanie wyświetlone okno Lista błędów i zostanie wyświetlone jedno z następujących błędów:
(C#)
Kompilowanie przekształcenia: Identyfikator GUID> microsoft.VisualStudio.TextTemplating<. GeneratedTextTransformation" nie zawiera definicji elementu "ExampleModel"
(Visual Basic)
Kompilowanie przekształcenia: "ExampleModel" nie jest członkiem identyfikatora GUID> "Microsoft.VisualStudio.TextTemplating<". GeneratedTextTransformation".
W takim przypadku kod szablonu tekstowego zawiera nieprawidłową nazwę właściwości.
ExampleModel
Określono jako nazwę właściwości, ale poprawna nazwa właściwości toLibraryModel
. Poprawną nazwę właściwości można znaleźć w parametrze zapewnia, jak pokazano w poniższym kodzie:<#@ DebuggingTestLanguage processor="DebuggingTestLanguageDirectiveProcessor" requires="fileName='Sample.ddd'" provides="ExampleModel=LibraryModel" #>
Kliknij dwukrotnie błąd w oknie Lista błędów, aby przejść do kodu.
Aby poprawić kod, zmień nazwę właściwości na
LibraryModel
w kodzie szablonu tekstowego.Zmiany są wyróżnione.
<#@ 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 #> <# } #>
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy DebugTest.tt, a następnie kliknij polecenie Uruchom narzędzie niestandardowe.
Teraz system przekształca szablon tekstowy i generuje odpowiedni plik wyjściowy. W oknie Lista błędów nie będą widoczne żadne błędy.