Udostępnij za pośrednictwem


Debugowanie szablonu tekst T4

Punkty przerwania można ustawić w szablonach tekst.Debugowanie szablonu projektowania, wybierz polecenie Debugowania szablon T4 pliku szablonu tekst w oknie Solution Explorer, w menu skrótów.Aby debugować szablonu run-time, po prostu debugowania aplikacji, do której należy.

Aby debugować szablonu, należy zrozumieć kroki procesu transformacji szablonu.Różnego rodzaju błędy mogą wystąpić w każdym kroku.Dostępne są następujące kroki.

Krok

Szablon projektowania: kiedy to się dzieje

Szablon Run-time: kiedy to się dzieje

Kod jest generowany na podstawie szablonu tekstu.

Błędy w dyrektywach, lub niezgodne lub dezorganizacji <#…#> tagi.

Podczas zapisywania szablonu lub wywołać Transformacja tekstu.

Podczas zapisywania szablonu lub wywołać Transformacja tekstu.

Wygenerowany kod jest skompilowany.

Błędy kompilacji w kodzie szablonu.

Natychmiast po poprzednim kroku.

Wraz z kod aplikacji.

Kod działa.

Błędy czasu wykonania w kodzie szablonu.

Natychmiast po poprzednim kroku.

Kiedy 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łędzie.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 tekst i debugowania w zwykły sposób.

Typowe błędy i poprawki

Poniższa tabela zawiera listę najbardziej typowych błędów i ich poprawki.

Komunikat o błędzie

Opis

Rozwiązanie

Nie można załadować klasy podstawowej '{0}' z dziedziczy z klasy, które transformacji.

Występuje, jeśli nie można odnaleźć klasy podstawowej określonej w inherits parametr w dyrektywie szablonu.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy.

Upewnij się określonej klasy istnieje i czy zestaw, który istnieje w jest określona w dyrektywie zestawu.

Nie można rozpoznać tekst dla file:{0}

Występuje, gdy nie można odnaleźć szablonu dołączone.Komunikat zawiera nazwę pliku dołączanego żądana.

Upewnij się, że ścieżka pliku jest oryginalnej ścieżki szablonów, lub że plik jest w lokalizacji, która jest zarejestrowana z hosta lub jest pełna ścieżka do pliku.

Błędy były generowane podczas inicjowania obiektu transformacji.Transformacja nie będzie działać.

Występuje, gdy "Initialize()" Klasa transformacji nie powiodło się lub zwróciła wartość false.

Kod w funkcji Initialize() pochodzi od klasy podstawowej transformacji, określonej w <#@template#> dyrektywy i z procesorów w dyrektywie.Błąd, który spowodował initialize prawdopodobnie nie znajduje się na liście błędów.Należy zbadać, dlaczego nie powiodło się.Można szukać w rzeczywistych wygenerowany kod Initialize() wykonując procedury debugowania szablon.

Zestawu '{0}' dla procesora dyrektywa '{1}' nie przyznano FullTrust zestaw uprawnień.Tylko zaufanych zestawów mogą zapewnić procesorów w dyrektywie.Ta dyrektywa procesor nie zostanie załadowana.

Występuje, gdy system nie udziela FullTrust uprawnienia do zestawu zawierającego procesor w dyrektywie.Komunikat zawiera nazwę zestawu i nazwa procesora w dyrektywie.

Pamiętaj, że używasz tylko zaufanych zestawów na komputerze lokalnym.

Ścieżka '{0}' musi być lokalnego na tym komputerze lub częścią Twojej strefy zaufanej.

Występuje, gdy dyrektywy lub dyrektywy zestawu odwołuje się plik, który jest nie na komputerze lokalnym lub na strefy zaufanej w sieci.

Upewnij się, że katalog, gdzie znajdują się dyrektywy lub dyrektyw zestawu jest w strefie zaufanych.Katalog sieciowy można dodać do strefy zaufanych programu Internet Explorer.

Wiele błędów składni, takich jak "Nieprawidłowy token" catch"" lub "przestrzeni nazw bezpośrednio nie mogą zawierać członków"

Zbyt wiele nawiasów klamrowych zamknięcia w kodzie szablonu.Kompilator jest to mylące z kodem generacji standardowych.

Sprawdź numer zamykające nawiasy klamrowe i nawiasy wewnątrz ograniczników kod.

Pętle warunkowe nie skompilowany lub wykonywane poprawnie.Na przykład:

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

Ten kod zawsze wyświetla wartość i.Tylko "Liczba to:" jest warunkowe.

W języku C# należy zawsze używać nawiasów klamrowych 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 szablonu projektowania lub kompilacji szablonu (wstępnie) runtime.

Visual Studioprzestaje działać podczas próby sprawdź kod generowany przez szablon runtime.

Blok tekstu jest za długa.T4 konwertuje łączenie wyrażeniem, jeden ciąg literału dla każdego wiersza szablonu bloków tekstu.Bloki bardzo długi tekst może overstep limity rozmiaru kompilatora.

Aby rozdzielić bloku długiego tekstu z bloku wyrażenie, takie jak:

<#= "" #>

Opisy ostrzeżenie i poprawki

Poniższa lista zawiera najczęściej ostrzeżenia z poprawki, jeśli są dostępne.

Komunikat ostrzegawczy

Opis

Rozwiązanie

Ładowanie pliku include '{0}' zwrócił zerowy lub pusty ciąg.

Występuje, jeśli plik szablonu dołączony tekst jest puste.Komunikat zawiera nazwę pliku w pliku.

Usuń dyrektywy include lub upewnij się, że plik ma pewne treści.

Kompilowanie transformacji:

Dołącza ten ciąg, aby wszystkie błędy lub ostrzeżenia, pochodzących z kompilatora, gdy kompiluje transformacja.Ciąg ten oznacza, że kompilator wygenerował błąd lub ostrzeżenie.

Jeśli masz problem ze znalezieniem biblioteki DLL, należy podać pełną ścieżkę lub w pełni kwalifikowana nazwa silne, jeśli znajduje się w pamięci podręcznej GAC.

Parametr "{0}" już istnieje w niniejszej 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 dyrektywy.

Usunąć specyfikację zduplikowany parametr.

Wystąpił błąd podczas ładowania pliku include '{0}'.Dyrektywy include zostanie zignorowany.

Występuje, gdy nie można odnaleźć pliku, określonego w include dyrektywy.Komunikat zawiera nazwę pliku i numer wiersza dyrektywy.

Upewnij się, że plik ten istnieje w tym samym katalogu co oryginalny plik szablonu tekstu lub w jednym z katalogów include, które są zarejestrowane z hosta.

Określono nieprawidłowy klasy podstawowej klasy transformacji.Klasa podstawowa musi pochodzić od Microsoft.VisualStudio.TextTemplating.TextTransformation.

Występuje, gdy inherits parametr w dyrektywie szablonu określa klasę, która dziedziczy z TextTransformation.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy.

Określ klasę, która wynika z TextTransformation.

Nieprawidłowy kultury została określona w niniejszej dyrektywy "szablonu".Kultura musi być w formacie "xx-XX".Niezmienna kultura będzie używany.

Występuje, gdy parametr kultury w dyrektywie w szablonie jest określona niepoprawnie.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy.

Zmień parametr kultury na prawidłowe kultury w formacie "xx-XX".

Debugowania Nieprawidłowa wartość '{0}' został określony w dyrektywie szablonu.Wartość debugowania musi być "true" lub "fałsz".Używany będzie domyślny "false".

Występuje, gdy debug w dyrektywie szablon został podany nieprawidłowo.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy.

Ustaw parametr debugowania na "true" lub "fałsz".

Nieprawidłowa wartość HostSpecific {0} została określona w dyrektywie szablon.Wartość HostSpecific musi być "true" lub "fałsz".Używany będzie domyślny "false".

Występuje, gdy parametr specyficzne dla hosta w template niepoprawnie określono dyrektywą.Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy.

Ustaw parametr specyficzne dla komputera na "true" lub "fałsz".

Nieprawidłowy język '{0}' został określony w dyrektywie "szablonu".Język musi być albo "C#" lub "VB".Wartość domyślna "C#" będzie używany.

Występuje, gdy nieobsługiwany język jest określona w template dyrektywy.Tylko "C#" lub "VB" są dozwolone (z uwzględnieniem wielkości liter).Wiadomość zawiera numer wiersza szablonu niniejszej dyrektywy.

Zestaw language parametr w dyrektywie szablonu "C#" lub "VB".

Znaleziono kilka dyrektyw danych wyjściowych w szablonie.Wszystkie oprócz pierwszego zostaną zignorowane.

Występuje, gdy wiele output dyrektyw są określone w pliku szablonu.Wiadomość zawiera numer wiersza dyrektywy zduplikowane dane wyjściowe.

Usuń duplikat output dyrektyw.

Znaleziono kilka dyrektyw szablonu w szablonie.Wszystkie oprócz pierwszego zostaną zignorowane.Wiele parametrów szablonu dyrektywy powinny zostać określone w ramach dyrektywy jeden szablon.

Występuje, jeśli określono wiele template dyrektyw w pliku szablonu tekstu (w tym pliki dołączone).Wiadomość zawiera numer wiersza dyrektywy duplikat szablonu.

Agregowanie różnych template dyrektyw w jeden 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ę niniejszej 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 znaleźć directive procesora określona w custom dyrektywy.Wiadomość zawiera dyrektywy nazwa, nazwa procesora i numer wiersza dyrektywy.

Zestaw processor atrybut w niniejszej dyrektywie do nazwy w dyrektywie procesor.

Nie można odnaleźć wymaganego parametru '{0}' dyrektywy "{1}".Dyrektywy będą ignorowane.

Występuje, gdy system nie zapewnia wymagany parametr w dyrektywie.Komunikat zawiera nazwę parametru brakuje, dyrektywa nazwa i numer wiersza.

Podaj brakujący parametr.

Procesor o nazwie '{0}' nie obsługuje dyrektywy o nazwie "{1}".Dyrektywy będą ignorowane.

Występuje, gdy dyrektywa procesor nie obsługuje dyrektywy.Wiadomość zawiera nazwy i linii numer naruszającym przepisy dyrektywy, wraz z nazwą procesora w dyrektywie.

Popraw nazwę niniejszej dyrektywy.

Dyrektywy dołączania pliku '{0}' powoduje nieskończoną pętlę.

Wyświetlane, jeśli cykliczne zawiera dyrektywy określono (na przykład plik A zawiera plik B, który zawiera plik, A).

Nie określono cykliczne dyrektyw dołączania.

Uruchamianie transformacji:

Dołącza ten ciąg, aby wszystkie błędy lub ostrzeżenia, które są generowane po uruchomieniu tego przekształcenia.

Nie dotyczy.

Początek lub koniec znaleziono nieoczekiwany w bloku.Upewnij się, że wpisany niepoprawnie znacznika początku lub końca, i że nie masz żadnych zagnieżdżone bloki w szablonie.

Wyświetlane, gdy nieoczekiwane < # lub #>.Oznacza to jeśli masz < # > po inny znacznik otwarte, które nie zostały zamknięte, albo masz # gdy niezamknięty tag otwarte przed nim nie istnieje.Wiadomość zawiera numer wiersza niedopasowane tag.

Usuń niezgodne tag początek lub koniec lub użyć znaku ucieczki.

Dyrektywy określono nieprawidłowy format.Dyrektywy będą ignorowane.Proszę określić dyrektywy w formacie < #@ nazwa [Nazwa parametru = "parametervalue"] * #>

Wyświetlane przez parser, jeżeli nie określono dyrektywy w poprawnym formacie.Wiadomość zawiera numer wiersza nieprawidłowe dyrektywy.

Sprawdź wszystkie dyrektywy są w formie < #@ nazwa [Nazwa parametru = "parametervalue"] * #>.Aby uzyskać więcej informacji, zobacz T4 Tekst szablonu dyrektyw.

Nie można załadować zestawu '{0}' dla zarejestrowanych procesor dyrektywa '{1}'

{2}

Występuje, gdy nie można załadować procesora w dyrektywie przez hosta.Komunikat identyfikuje montażu, przewidziane w dyrektywie procesor i nazwa procesora w dyrektywie.

Upewnij się dyrektywa procesor jest poprawnie zarejestrowany i że istnieje zestaw.

Nie można odnaleźć typu "{0}" w zestawie "{1}" dla zarejestrowanych w dyrektywie procesor {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 wyszukuje informacje o dyrektywie procesora (nazwa zestawu i typu) w rejestrze.Pamiętaj, dyrektywa procesor jest poprawnie zarejestrowany i typ istnieje w zestawie.

Wystąpił problem podczas ładowania zestawu {0}.

Występuje, gdy problem podczas ładowania zestawu.Komunikat zawiera nazwę zespołu.

Można określić zestawów ładowanych w < @# zestawu #> dyrektywy oraz w dyrektywie procesory.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, tworzenie i Inicjowanie procesor dyrektywy o nazwie "{1}".Typ procesora jest {0}.Dyrektywy będą ignorowane.

Występuje, gdy system nie można utworzyć lub zainicjować procesor w dyrektywie.Komunikat zawiera nazwę i linii numer dyrektywy i typ procesora.

Należy używać poprawnego procesor w dyrektywie, i że dyrektywa procesor ma publicznego konstruktora domyślnego.W przeciwnym wypadku opcje debugowania, aby dowiedzieć się, dlaczego nie jest metoda Initialize() procesora w dyrektywie.Aby uzyskać więcej informacji, zobacz Debugowanie szablonu tekst 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.

Montaż odniesienia pochodzą z < @# zestawu #> dyrektywy i z procesorów w dyrektywie.Upewnij się, że parametr 'name' w parametrze zestawu jest poprawny.

Próba określenia "{0}" wartość nieobsługiwana {1} dla dyrektywy (2)

Występuje, przez RequiresProvidesDirectiveProcessor, (wszystkie dziedziczyć naszych wygenerowany procesorów w dyrektywie), gdy podana wymaga lub nieobsługiwany zawiera argument.

Pamiętaj, że nazwy w name = 'value' w parach wymaga i zapewnia parametry są poprawne.