Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Punkty przerwania można ustawić w szablonach tekstowych. Aby debugować szablon tekstowy w czasie projektowania, zapisz plik szablonu tekstowego, a następnie wybierz pozycję Debuguj szablon T4 w menu skrótów pliku w Eksploratorze rozwiązań. Aby debugować szablon tekstowy w czasie wykonywania, po prostu debuguj aplikację, do której należy.
Aby debugować szablon tekstowy, należy zrozumieć kroki procesu przekształcania szablonu. W każdym kroku mogą wystąpić różne rodzaje błędów. Kroki są następujące.
| Step | Szablon czasu projektowania: kiedy to się dzieje | Szablon czasu wykonywania: kiedy to się dzieje |
|---|---|---|
| Kod jest generowany na podstawie szablonu tekstowego. Błędy w dyrektywach lub niedopasowane lub nieuporządkowane <#...#> tagi. |
Podczas zapisywania szablonu lub wywoływania przekształcenia tekstu. | Podczas zapisywania szablonu lub wywoływania przekształcenia tekstu. |
| Wygenerowany kod jest kompilowany. Błędy kompilacji w kodzie szablonu. |
Natychmiast po poprzednim kroku. | Wraz z kodem aplikacji. |
| Kod działa. Błędy czasu wykonywania w kodzie szablonu. |
Natychmiast po poprzednim kroku. | Po uruchomieniu aplikacji i wywołaniu kodu szablonu. |
W większości przypadków numery wierszy w kodzie szablonu są podane w raporcie o błędach. Gdy raport o błędach odwołuje się do tymczasowej nazwy pliku, zwykłą przyczyną jest niedopasowany nawias w kodzie szablonu tekstowego.
Punkty przerwania można ustawić w szablonach tekstowych i debugować w zwykły sposób.
Typowe błędy i poprawki
W poniższej tabeli wymieniono najczęstsze błędy i ich poprawki.
| Komunikat o błędzie | Description | Rozwiązanie |
|---|---|---|
| Nie można załadować klasy bazowej "{0}", z której dziedziczy klasa Transformation. | Występuje, jeśli nie można znaleźć klasy bazowej określonej w parametrze inherits w dyrektywie szablonu. Wiadomość zawiera numer wiersza dyrektywy szablonu. |
Upewnij się, że określona klasa istnieje i że zestaw, w nim istnieje, jest określony w dyrektywie zestawu. |
| Nie można odnaleźć tekstu dołączenia dla pliku:{0} | Występuje, gdy nie można znaleźć dołączonego szablonu. Komunikat zawiera nazwę żądanego pliku dołączonego. | Upewnij się, że ścieżka pliku jest względna względem oryginalnej ścieżki szablonu lub że plik znajduje się w lokalizacji zarejestrowanej na hoście lub że istnieje pełna ścieżka do pliku. |
| Błędy zostały wygenerowane podczas inicjowania obiektu przekształcania. Przekształcenie nie zostanie uruchomione. | Występuje, gdy "Initialize()" klasy transformacji nie powiodło się lub zwróciło wartość false. | Kod w funkcji Initialize() pochodzi z klasy transformacji podstawowej określonej w <dyrektywie #@template#> i z procesorów dyrektywy. Błąd, który spowodował niepowodzenie inicjalizacji, prawdopodobnie znajduje się na liście błędów. Sprawdź, dlaczego nie powiodło się. Możesz przyjrzeć się rzeczywistemu wygenerowanemu kodowi initialize(), wykonując procedury debugowania szablonu. |
| Zestaw "{0}" dla procesora dyrektywy "{1}" nie otrzymał zestawu uprawnień FullTrust. Tylko zaufane zestawy mogą dostarczać procesory dyrektyw. Ten procesor dyrektywy nie zostanie załadowany. | Występuje, gdy system nie udziela uprawnień FullTrust do zestawu zawierającego procesor dyrektywy. Komunikat zawiera nazwę zestawu i nazwę procesora dyrektywy. | Upewnij się, że na komputerze lokalnym są używane tylko zaufane zestawy. |
| Ścieżka "{0}" musi być lokalna na tym komputerze lub częścią zaufanej strefy. | Występuje, gdy dyrektywa lub dyrektywa zestawu odwołuje się do pliku, który nie znajduje się na komputerze lokalnym lub w zaufanej strefie sieci. | Upewnij się, że katalog, w którym znajdują się dyrektywy lub dyrektywy zestawu, znajduje się w zaufanej strefie. Katalog sieciowy można dodać do strefy zaufanej za pomocą programu Internet Explorer. |
| Wiele błędów składniowych, takich jak "Nieprawidłowy token 'catch'" lub "Przestrzeń nazw nie może bezpośrednio zawierać członków" | Zbyt wiele zamykających nawiasów klamrowych w kodzie szablonu. Kompilator myli to ze standardowym kodem generowania. | Sprawdź liczbę zamykających nawiasów klamrowych i nawiasów wewnątrz ograniczników kodu. |
Pętle lub instrukcje warunkowe nie zostały skompilowane lub wykonane poprawnie. Na przykład: <#if (i>10)#> Number is: <#= i #>.Ten kod zawsze generuje wartość i. Tylko "Liczba jest:" jest warunkowa. |
W języku C# zawsze należy używać nawiasów klamrowych do otaczania bloków tekstu osadzonych w instrukcjach sterujących. | Dodaj nawiasy klamrowe: <#if (i>10) { #> Number is: <#= i #><# } #>. |
| "Wyrażenie jest zbyt złożone" podczas przetwarzania szablonu czasu projektowania lub kompilowania szablonu środowiska uruchomieniowego (wstępnie przetworzonego). Program Visual Studio przestaje działać podczas próby sprawdzenia kodu wygenerowanego przez szablon środowiska uruchomieniowego. |
Blok tekstu jest za długi. T4 konwertuje bloki tekstowe na wyrażenie konkatenacji ciągów z jednym literałem ciągu dla każdego wiersza szablonu. Bardzo długie bloki tekstowe mogą przekraczać limity rozmiaru kompilatora. | Podziel długi blok tekstowy na blok wyrażeń, taki jak:<#= "" #> |
Opisy ostrzeżeń i poprawki
W poniższej tabeli wymieniono najbardziej typowe ostrzeżenia wraz z poprawkami, jeśli są dostępne.
| Komunikat ostrzegawczy | Description | Rozwiązanie |
|---|---|---|
| Załadowanie pliku dołączania "{0}" zwróciło ciąg o wartości null lub pusty. | Występuje, jeśli dołączony plik szablonu tekstowego jest pusty. Komunikat zawiera nazwę dołączonego pliku. | Usuń dyrektywę include lub upewnij się, że plik ma pewną zawartość. |
| Kompilowanie przekształcenia: | Poprzedza ten ciąg wszystkimi błędami lub ostrzeżeniami pochodzącymi z kompilatora podczas kompilowania przekształcenia. Ten ciąg oznacza, że kompilator rzucił błąd lub ostrzeżenie. | Jeśli masz problem ze znalezieniem biblioteki DLL, może być konieczne podanie pełnej ścieżki lub w pełni kwalifikowanej silnej nazwy, jeśli biblioteka DLL znajduje się w GAC. |
| Parametr "{0}" już istnieje w dyrektywie. Zduplikowany parametr zostanie zignorowany. | Występuje, gdy parametr jest określony więcej niż raz w dyrektywie. Komunikat zawiera nazwę parametru i numer wiersza dyrektywy. | Usuń zduplikowaną specyfikację parametru. |
| Wystąpił błąd podczas ładowania pliku dołączania "{0}". Dyrektywa include zostanie zignorowana. | Występuje, gdy nie można znaleźć pliku określonego w dyrektywie include. Komunikat zawiera nazwę pliku i numer wiersza dyrektywy. |
Upewnij się, że plik dołączania istnieje w tym samym katalogu co oryginalny plik szablonu tekstowego lub w jednym z katalogów dołączania zarejestrowanych w hoście. |
| Określono nieprawidłową klasę bazową dla klasy Transformation. Klasa bazowa musi pochodzić z klasy Microsoft.VisualStudio.TextTemplating.TextTransformation. | Występuje, gdy parametr inherits w dyrektywie szablonu określa klasę, która nie dziedziczy z klasy TextTransformation. Wiadomość zawiera numer wiersza dyrektywy szablonu. |
Określ klasę, która pochodzi z klasy TextTransformation. |
| W dyrektywie "template" określono nieprawidłową kulturę. Kultura musi być w formacie "xx-XX". Będzie używana niezmienna kultura. | Występuje, gdy parametr kultury w dyrektywie szablonu jest niepoprawnie określony. Wiadomość zawiera numer wiersza dyrektywy szablonu. | Zmień parametr kultury na prawidłową kulturę w formacie "xx-XX". |
| Nieprawidłowa wartość debugowania "{0}" została określona w dyrektywie szablonu. Wartość debugowania musi mieć wartość "true" lub "false". Zostanie użyta wartość domyślna "false". | Występuje, gdy debug parametr w dyrektywie szablonu jest niepoprawnie określony. Wiadomość zawiera numer wiersza dyrektywy szablonu. |
Ustaw parametr debugowania na wartość "true" lub "false". |
| Nieprawidłowa wartość HostSpecific "{0}" została określona w dyrektywie szablonu. Wartość HostSpecific musi mieć wartość "true" lub "false". Zostanie użyta wartość domyślna "false". | Występuje, gdy parametr specyficzny dla hosta w template dyrektywie jest niepoprawnie określony. Wiadomość zawiera numer wiersza dyrektywy szablonu. |
Ustaw parametr specyficzny dla hosta na wartość "true" lub "false". |
| W dyrektywie „template” określono nieprawidłowy język `{0}`. Język musi być "C#" lub "VB". Zostanie użyta wartość domyślna "C#". | Występuje, gdy w template dyrektywie określono nieobsługiwany język. Dozwolone są tylko "C#" lub "VB" (bez uwzględniania wielkości liter). Wiadomość zawiera numer wiersza dyrektywy szablonu. |
Ustaw parametr w dyrektywie szablonu language na "C#" lub"VB". |
| W szablonie znaleziono wiele dyrektyw wyjściowych. Wszystko oprócz pierwszego zostanie zignorowane. | Występuje, gdy w pliku szablonu określono wiele output dyrektyw. Komunikat zawiera numer wiersza zduplikowanej dyrektywy wyjściowej. |
Usuń zduplikowane output dyrektywy. |
| W szablonie znaleziono wiele dyrektyw. Wszystkie oprócz pierwszego zostaną zignorowane. W jednej dyrektywie szablonu należy określić wiele parametrów dyrektywy szablonu. | Występuje w przypadku określenia wielu template dyrektyw w pliku szablonu tekstowego (w tym dołączonych plików). Komunikat zawiera numer wiersza zduplikowanej dyrektywy szablonu. |
Agregowanie różnych template dyrektyw do jednej template dyrektywy. |
| Nie określono procesora dla dyrektywy o nazwie "{0}". Dyrektywa zostanie zignorowana. | Występuje, jeśli określisz dyrektywę custom , ale nie podaj atrybutu processor . Komunikat zawiera nazwę dyrektywy i numer wiersza. |
Podaj atrybut procesora o nazwie directive dla dyrektywy processor. |
| Nie można odnaleźć procesora o nazwie "{0}" dla dyrektywy o nazwie "{1}". Dyrektywa zostanie zignorowana. | Występuje, gdy system nie może odnaleźć directive procesora określonego custom w dyrektywie. Komunikat zawiera nazwę dyrektywy, nazwę procesora i numer wiersza dyrektywy. |
processor Ustaw atrybut w dyrektywie na nazwę procesora dyrektywy. |
| Nie można odnaleźć wymaganego parametru "{0}" dla dyrektywy "{1}". Dyrektywa zostanie zignorowana. | Występuje, gdy system nie dostarcza wymaganego parametru dyrektywy. Komunikat zawiera nazwę brakującego parametru, nazwę dyrektywy i numer wiersza. | Podaj brakujący parametr. |
| Procesor o nazwie "{0}" nie obsługuje dyrektywy o nazwie "{1}". Dyrektywa zostanie zignorowana. | Występuje, gdy procesor nie obsługuje dyrektywy. Komunikat zawiera nazwę i numer wiersza niepoprawnej dyrektywy wraz z nazwą procesora dyrektyw. | Popraw nazwę dyrektywy. |
| Dyrektywa include dla pliku "{0}" powoduje nieskończoną pętlę. | Wyświetlane, jeśli określono dyrektywy dołączania cyklicznego (na przykład plik A zawiera plik B, który zawiera plik A). | Nie należy używać cyklicznych dyrektyw dołączania. |
| Trwa transformacja: | Poprzedza ten ciąg wszystkimi błędami lub ostrzeżeniami generowanymi podczas uruchamiania przekształcenia. | Nie dotyczy. |
| W bloku znaleziono nieoczekiwany znacznik początkowy lub końcowy. Upewnij się, że nie wpisałeś niewłaściwie tagu początkowego lub końcowego, i że nie masz zagnieżdżonych sekcji w szablonie. | Wyświetlane, gdy masz nieoczekiwany <# lub #>. Oznacza to, że jeśli masz <# po innym otwartym tagu, który nie został zamknięty, lub masz #> gdy nie ma przed nim otwartego tagu, który nie został zamknięty. Komunikat zawiera numer linii niedopasowanego tagu. | Usuń niezgodność tagu początkowego lub końcowego albo użyj znaku ucieczki. |
Dyrektywa została określona w niewłaściwym formacie. Dyrektywa zostanie zignorowana. Określ dyrektywę w formacie <#@ name [parametername="parametervalue"]* #> |
Wyświetlane przez analizator, jeśli dyrektywa nie jest określona w poprawnym formacie. Komunikat zawiera numer wiersza nieprawidłowej dyrektywy. | Upewnij się, że wszystkie dyrektywy mają postać <#@ name [parametername="parametervalue"]* #>. Aby uzyskać więcej informacji, zobacz T4 Text Template Directives (Dyrektywy szablonu tekstowego T4). |
| Nie można załadować zestawu "{0}" dla zarejestrowanego procesora dyrektywy "{1}" {2} |
Występuje to, gdy host nie może załadować procesora dyrektywy. Komunikat identyfikuje zestaw podany dla procesora dyrektywy i nazwę procesora dyrektywy. | Upewnij się, że procesor dyrektywy jest poprawnie zarejestrowany i że zestaw istnieje. |
| Nie można odnaleźć typu "{0}" w zestawie "{1}" dla zarejestrowanego procesora dyrektywy "{2}" {3} |
Występuje, gdy typ procesora dyrektywy nie może być załadowany z jego zestawu. Komunikat zawiera nazwę procesora typu, zestawu i dyrektywy. | vshost znajduje informacje o przetwarzarce dyrektyw (nazwa, zestaw, typ) w rejestrze. Upewnij się, że procesor dyrektywy jest poprawnie zarejestrowany i że typ istnieje w zestawie. |
| Wystąpił problem podczas ładowania zestawu "{0}" | Występuje, gdy występuje problem podczas ładowania zestawu. Komunikat zawiera nazwę zestawu. | Zestawy, które mają być załadowane, można określić w dyrektywach <@#assembly#> oraz przez procesory dyrektyw. Komunikat o błędzie, który pojawia się po tym ciągu, powinien dostarczyć więcej danych na temat przyczyny niepowodzenia ładowania zestawu. |
| Wystąpił problem podczas tworzenia i inicjowania procesora dla dyrektywy o nazwie "{1}". Typ procesora to {0}. Dyrektywa zostanie zignorowana. | Występuje, gdy system nie może utworzyć lub zainicjować procesora dyrektywy. Komunikat zawiera nazwę i numer wiersza dyrektywy oraz typ procesora. | Upewnij się, że używasz poprawnego procesora dyrektywy i że procesor dyrektywy ma publiczny konstruktor domyślny. W przeciwnym razie użyj opcji debugowania, aby dowiedzieć się, dlaczego metoda Initialize() procesora dyrektywy kończy się niepowodzeniem. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z szablonami tekstu. |
| Wyjątek został zgłoszony podczas przetwarzania dyrektywy o nazwie "{0}". | Występuje, gdy procesor dyrektywy zgłasza wyjątek podczas przetwarzania dyrektywy. | Upewnij się, że parametry procesora dyrektywy są poprawne. |
| Host rzucił wyjątek podczas próby rozwiązania odwołania do zestawu "{0}". | Występuje, gdy host zgłasza wyjątek podczas próby rozwiązania odwołania do zestawu. Komunikat zawiera ciąg referencyjny do zestawu. | Odwołania do zestawów pochodzą z <dyrektyw @#assembly#> i procesorów dyrektyw. Upewnij się, że parametr "name" podany w parametrach zestawu jest właściwy. |
| Próba określenia nieobsługiwanej {1} wartości "{0}" dla dyrektywy {2} | Występuje w elemencie RequiresProvidesDirectiveProcessor (wszystkie nasze wygenerowane procesory dyrektyw pochodzą z niego), gdy podasz nieobsługiwany argument requires lub provides. | Upewnij się, że nazwy w parach name='value' podane w wymaganiach i podane parametry są poprawne. |