Debugowanie szablonu tekstowego T4
Punkty przerwania można ustawić w szablonach tekstu.Debugowania szablonu projektowania tekstowego, zapisać plik szablonu, a następnie wybierz Debug szablon T4 pliku w oknie Solution Explorer, w menu skrótów.Aby debugować szablon tekst w czasie wykonywania, po prostu debugowania aplikacji, do której należy.
Aby debugować szablon tekst, należy zrozumieć etapy procesu transformacji szablonu.Różne rodzaje błędów może wystąpić w każdym kroku.Kroki są następujące.
Krok |
Podczas projektowania szablonu: kiedy to się stanie |
Szablon wykonywania: kiedy to się stanie |
---|---|---|
Kod jest generowany na podstawie szablonu tekstu. Błędy w dyrektywach, lub niezgodne lub nieuporządkowane <#…#> tagi. |
Podczas zapisywania szablonu lub wywołać przekształcenie tekstu. |
Podczas zapisywania szablonu lub wywołać przekształcenie tekstu. |
Wygenerowany kod jest kompilowana. Błędy kompilacji w kodzie szablonu. |
Natychmiast po poprzednim kroku. |
Wraz z kod aplikacji. |
Kod jest uruchamiany. Błędy w czasie wykonywania w kodzie szablonu. |
Natychmiast po poprzednim kroku. |
Gdy aplikacja jest uruchamiana i wywołuje kod szablonu. |
W większości przypadków numery wierszy w kodzie szablonu są podane w raporcie o błędach.Gdy raport o błędzie odwołuje się do nazwy pliku tymczasowego, częsta przyczyna jest niedopasowane nawias w kodzie szablonu tekstu.
Można ustawić punkty przerwania w szablonach tekstu i debugowania w zwykły sposób.
Typowe błędy i poprawki
Poniższa lista zawiera większość typowych błędów i ich poprawki.
Komunikat o błędzie |
Opis |
Rozwiązanie |
---|---|---|
Nie można załadować klasy podstawowej '{0}' z klasy, które transformacji dziedziczy. |
Występuje wtedy, gdy nie można znaleźć klasy podstawowej określonej w inherits parametr w dyrektywie szablonu.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy. |
Upewnij się, istnieje określonej klasy i że zestaw, który istnieje w jest określony w dyrektywie zestawu. |
Nie można rozpoznać dołączyć tekst dla file:{0} |
Występuje, gdy nie może odnaleźć dołączony szablon.Komunikat zawiera nazwę pliku dołączanego żądana. |
Pamiętaj, że ścieżka pliku jest oryginalnej ścieżki szablonu lub że plik jest w lokalizacji, która jest zarejestrowana z hostem lub że jest pełną ścieżką do pliku. |
Błędy były generowane podczas inicjowania obiektu transformacji.Przekształcenie nie będzie działać. |
Występuje, gdy nie powiodło się "Initialize()" Klasa transformacji lub zwróciła wartość false. |
Kod funkcji Initialize() pochodzi od klasy podstawowej transformacji, określonej w <#@template#> dyrektywy oraz z dyrektywą procesorów.Na liście błędów jest błąd, który spowodował initialize prawdopodobnie nie powiedzie się.Zbadać, dlaczego nie powiodło się.Można szukać w rzeczywistej wygenerowany kod Initialize() wykonując procedury do debugowania szablonu. |
Zestawu '{0}' dla procesora w dyrektywie "{1}" nie przyznano FullTrust zestaw uprawnień.Zapewnienie procesorów w dyrektywie są dozwolone tylko zaufanych zestawów.Ten procesor dyrektywa nie zostanie załadowana. |
Występuje, gdy system nie udziela FullTrust uprawnienia do zestawu zawierającego procesora w dyrektywie.Komunikat zawiera nazwę zestawu i nazwa tekstów w dyrektywie. |
Należy upewnić się, że tylko zaufanych zestawów na komputerze lokalnym. |
Ścieżka '{0}' musi być lokalnego na tym komputerze lub część swojej strefy zaufanej. |
Występuje, gdy dyrektywy lub dyrektywy zestawu odwołuje się do pliku, który jest nie na komputerze lokalnym lub na strefy zaufanej w sieci. |
Pamiętaj, że katalog gdzie znajdują się dyrektywy lub dyrektyw zestawu jest w strefie zaufanej.Katalog sieciowy można dodać do zaufanej strefy za pomocą programu Internet Explorer. |
Wiele błędów składni, takich jak "Nieprawidłowy token" catch"" lub "obszar nazw nie występują bezpośrednio członkowie" |
Zbyt wiele nawiasów klamrowych zamknięcia w kodzie szablonu.Kompilator jest mylące go z kodem generacji standardowych. |
Sprawdź numer zamykające nawiasy klamrowe i nawiasy wewnątrz ograniczników kodu. |
Pętle lub warunkowe nie skompilowane lub wykonane poprawnie.Na przykład:
Ten kod wyświetla zawsze wartość i.Tylko "Liczba to:" jest uzależniona. |
W języku C# należy zawsze używać nawiasów sześciennych, aby otoczyć bloków tekstu, które są osadzone w sprawozdaniu z kontroli. |
Dodaj nawiasy klamrowe:
|
"Zbyt skomplikowane wyrażenie" podczas przetwarzania szablon projektowania lub kompilacji szablonu (wstępnie przetworzonych) runtime. Visual Studioprzestaje działać, gdy próbuje sprawdzić kod wygenerowany przez szablon runtime. |
Blok tekstu jest zbyt długa.T4 Konwertuje wyrażenia tekstowego łączenie z jeden ciąg literału dla każdego wiersza szablonu bloków tekstu.Bloki tekstowe bardzo długich można overstep limity rozmiaru kompilatora. |
Rozbić blok długiego tekstu z bloku wyrażenie, takie jak: <#= "" #> |
Opisy ostrzeżenie i poprawki
Poniższa lista zawiera najczęściej ostrzeżenia wraz z poprawki, jeśli jest dostępna.
Komunikat ostrzegawczy |
Opis |
Rozwiązanie |
---|---|---|
Trwa ładowanie pliku dołączanego '{0}' zwrócił wartość zerową lub pusty ciąg. |
Występuje, jeśli plik szablonu zawartym tekście jest puste.Komunikat zawiera nazwę pliku dołączanego pliku. |
Usuń dyrektywa include lub upewnij się, że plik zawiera część zawartości. |
Kompilowanie transformacji: |
Dołącza ten ciąg, aby wszystkie błędy lub ostrzeżenia pochodzące z kompilatora, jeżeli kompiluje transformacji.Ciąg ten oznacza, że kompilator zwrócił błąd lub ostrzeżenie. |
Jeśli masz problem ze znalezieniem pliku DLL, może być konieczne zapewnić pełną ścieżkę lub pełni kwalifikowana silnej nazwy, jeśli biblioteka znajduje się w pamięci podręcznej GAC. |
Parametr "{0}" już istnieje w tej dyrektywie.Zduplikowany parametr zostanie zignorowany. |
Występuje, gdy parametr jest określony więcej niż jeden raz w dyrektywie.Komunikat zawiera nazwę parametru i numer wiersza niniejszej dyrektywy. |
Usunąć specyfikację zduplikowany parametr. |
Wystąpił błąd podczas ładowania pliku dołączanego '{0}'.Dyrektywa include zostanie zignorowany. |
Występuje, gdy nie można znaleźć w pliku określonym w include dyrektywy.Komunikat zawiera nazwę pliku i numer wiersza niniejszej dyrektywy. |
Upewnij się, że plik istnieje w tym samym katalogu co oryginalny plik tekstu w szablonie lub w jednym z katalogów include, które są zarejestrowane z hostem. |
Określono nieprawidłowy klasy podstawowej dla klasy transformacji.Klasa podstawowa musi pochodzić od Microsoft.VisualStudio.TextTemplating.TextTransformation. |
Występuje, gdy inherits parametr w dyrektywie szablonu określa klasy, która dziedziczy z TextTransformation.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy. |
Określ klasę, która wynika z TextTransformation. |
Określono nieprawidłowy kultury w dyrektywie "szablon".Kultura musi mieć format "xx-XX".Niezmienna kultura będzie używany. |
Występuje, gdy parametr kultury w dyrektywie szablon zostanie określony niepoprawnie.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy. |
Zmień parametr kultury na prawidłowe kultury w formacie "xx-XX". |
W dyrektywie szablonu określono wartość debugowania nieprawidłowe '{0}'.Wartość debug musi być "true" lub "fałsz".Będzie używana wartość domyślna "false". |
Występuje, gdy debug niepoprawnie określono parametr w dyrektywie szablonu.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy. |
Ustaw parametr debugowania na "true" lub "fałsz". |
Określono nieprawidłową wartość HostSpecific '{0}' w dyrektywie szablonu.Wartość HostSpecific musi być "true" lub "fałsz".Będzie używana wartość domyślna "false". |
Występuje, gdy parametr specyficzne dla hosta w template dyrektywy określono niepoprawnie.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy. |
Ustaw parametr specyficzne dla hosta na "true" lub "fałsz". |
Określono nieprawidłowy język '{0}' w dyrektywie "szablon".Język musi być albo "C#" lub "VB".Będzie używana wartość domyślna "C#". |
Występuje, gdy nieobsługiwany język jest określona w template dyrektywy.Tylko "C#" lub "VB" są dozwolone (jest uwzględniana wielkość liter).Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy. |
Zestaw language parametr w dyrektywie szablonu "C#" lub "VB". |
Znaleziono kilka dyrektyw wyjścia w szablonie.Wszystkie z wyjątkiem pierwszego zostaną zignorowane. |
Występuje, gdy wiele output dyrektyw są określone w pliku szablonu.Wiadomość zawiera numer dyrektywy wyjściowej duplikatów. |
Usuń duplikat output dyrektyw. |
Znaleziono kilka dyrektyw szablonu w szablonie.Wszystkie z wyjątkiem pierwszego zostaną zignorowane.Wiele parametrów do szablonu dyrektywy powinny zostać określone w ramach dyrektywy jeden szablon. |
Występuje wtedy, gdy można określić wiele template dyrektyw w pliku szablonu tekstu (w tym pliki dołączone).Wiadomość zawiera numer wiersza dyrektywy Duplikuj szablon. |
Agregowanie różnych template dyrektyw do jednej template dyrektywy. |
Procesor nie został określony dla dyrektywy o nazwie "{0}".Dyrektywy będą ignorowane. |
Występuje, jeśli określisz custom dyrektywy, ale nie zapewniają processor atrybut.Komunikat zawiera nazwę dyrektywy i numer wiersza. |
Zapewnić processor atrybut o nazwie directive procesora dla niniejszej dyrektywy. |
Nie można odnaleźć procesora o nazwie "{0}" dla dyrektywy o nazwie "{1}".Dyrektywy będą ignorowane. |
Występuje, gdy system nie może odnaleźć directive procesora określona w custom dyrektywy.Wiadomość zawiera nazwę w dyrektywie, nazwa tekstów i numer wiersza niniejszej dyrektywy. |
Zestaw processor atrybut w dyrektywie na nazwę procesora w dyrektywie. |
Nie można odnaleźć wymaganego parametru "{0}" dla dyrektywy "{1}".Dyrektywy będą ignorowane. |
Występuje, gdy system nie zawiera wymaganego parametru w dyrektywie.Komunikat zawiera nazwę brakujący parametr, dyrektywa nazwę i numer wiersza. |
Podaj brakujący parametr. |
Procesor o nazwie "{0}" nie obsługuje tej dyrektywy o nazwie "{1}".Dyrektywy będą ignorowane. |
Występuje, gdy dyrektywa procesor nie obsługuje dyrektywy.Wiadomość zawiera nazwę i wiersza numer dyrektywy naruszającego wraz z nazwą procesora w dyrektywie. |
Popraw nazwę niniejszej dyrektywy. |
Dyrektywy dołączania pliku '{0}' powoduje nieskończoną pętlę. |
Wyświetlane, jeśli dyrektyw dołączania cykliczne są określone (na przykład pliku A zawiera plik B, który zawiera plik A). |
Nie określono cykliczną dyrektyw dołączania. |
Uruchamianie transformacji: |
Dołącza ten ciąg, aby wszystkie błędy lub ostrzeżenia, które są generowane podczas wykonywania przekształcenia. |
Nie dotyczy. |
Znaleziono nieoczekiwany znacznik rozpoczęcia lub zakończenia w bloku.Upewnij się, że nie błędnie wpisano początek lub koniec tag i że nie ma żadnych zagnieżdżone bloki w szablonie. |
Wyświetlany, gdy użytkownik ma nieoczekiwany <# lub #>.To znaczy jeśli masz <# po inny znacznik open, który nie został zamknięty lub użytkownik ma #> podczas niezamknięty tag otwarte przed nim nie istnieje.Wiadomość zawiera numer wiersza niedopasowane tagu. |
Usuń niedopasowane znacznika początku lub na końcu albo użyć znaku ucieczki. |
Dyrektywa została określona w złym formacie.Dyrektywy będą ignorowane.Proszę określić dyrektywy w formacie <#@ nazwa [Nazwa parametru = "parametervalue"] * #> |
Wyświetlane przez parser, jeśli nie określono dyrektywy w poprawnym formacie.Wiadomość zawiera numer wiersza nieprawidłowe dyrektywy. |
Sprawdź wszystkie dyrektywy są w postaci <#@ nazwa [Nazwa parametru = "parametervalue"] * #>.Aby uzyskać więcej informacji, zobacz Dyrektywy T4 dotyczące szablonu tekstowego. |
Nie można załadować zestawu '{0}' dla zarejestrowanych procesora w dyrektywie "{1}" {2} |
Występuje, gdy nie można załadować procesora w dyrektywie przez hosta.Komunikat identyfikuje montażu, przewidziane w dyrektywie procesora i nazwa tekstów w dyrektywie. |
Upewnij się dyrektywa procesor jest on poprawnie zarejestrowany oraz czy istnieje zestaw. |
Nie znaleziono typu "{0}" w zestawie "{1}" dla zarejestrowanych w dyrektywie procesora {2} {3} |
Występuje, gdy nie można załadować typu procesora dyrektywa z jej zestawu.Komunikat zawiera nazwę typu, montażu i procesor w dyrektywie. |
Vshost znajdzie informacje o procesorze w dyrektywie (nazwa, montażu i typ) w rejestrze.Upewnij się w dyrektywie procesor jest on poprawnie zarejestrowany oraz czy typ istnieje w zestawie. |
Wystąpił problem podczas ładowania zestawu '{0}' |
Występuje, gdy problem podczas ładowania zestawu.Komunikat zawiera nazwę zestawu. |
Można określić zestawy do załadowania do <@# assembly #> dyrektyw i przez przetwórców w dyrektywie.Komunikat o błędzie, który następuje ciąg ten dostarcza więcej danych na Dlaczego ładowanie zestawu nie powiodło się. |
Wystąpił problem podczas tworzenia i inicjowania procesor dyrektywy o nazwie "{1}".Typ procesora jest {0}.Dyrektywy będą ignorowane. |
Występuje, gdy system nie można utworzyć lub zainicjować procesora w dyrektywie.Komunikat zawiera nazwę i wiersza numer dyrektywy i typ procesora. |
Upewnij się pomocą poprawne procesora w dyrektywie oraz że dyrektywa procesor ma publicznego konstruktora domyślnego.Aby dowiedzieć się, dlaczego nie jest metoda Initialize() procesora w dyrektywie w przeciwnym razie, skorzystaj z opcji debugowania.Aby uzyskać więcej informacji, zobacz Debugowanie szablonu tekstowego T4. |
Wystąpił wyjątek podczas przetwarzania dyrektywy o nazwie "{0}". |
Występuje, gdy procesor dyrektywy zgłasza wyjątek podczas przetwarzania dyrektywy. |
Upewnij się, że parametry procesora w dyrektywie są poprawne. |
Host zgłosił wyjątek podczas próby rozwiązania odwołanie do zestawu '{0}'. |
Występuje, gdy host zgłasza wyjątek, gdy próbuje rozpoznać odwołania do zestawu.Wiadomość zawiera zestaw odwołać ciąg. |
Zestaw odwołania pochodzą z <@# assembly #> dyrektyw i z procesorów w dyrektywie.Pamiętaj, że parametr 'name' w parametrze zestawu jest poprawna. |
Próba do określenia wartości nieobsługiwane {1} '{0}' w dyrektywie {2} |
Występuje przez RequiresProvidesDirectiveProcessor, (wszystkie naszych wygenerowany procesorów w dyrektywie dziedziczyć po nim), gdy zostanie podana wymaga lub nieobsługiwany zawiera argument. |
Pamiętaj, że nazwy w name = "wartość" w parach wymaga i zapewnia parametry są poprawne. |