Udostępnij za pośrednictwem


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:

<#if (i>10)#>
   Number is: <#= i #>.

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:

<#if (i>10) { #>
   Number is: <#= i #>.
<# } #>

"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.