Kiedy edytuję T4, skrypt jest wykonywany za każdym razem, gdy przełączam się do innego pliku. Jest to w porządku dla szybkich prostych skryptów, ale wykonanie niektórych skryptów zajmuje dużo czasu. Czy istnieje sposób, aby wyłączyć to zachowanie? Chcę, aby skrypt działał tylko wtedy, gdy zapiszę plik T4 lub ręcznie wybierz "Uruchom narzędzie niestandardowe" z menu.Jak zatrzymać uruchamianie T4 za każdym razem, gdy przełączam się na inną kartę?
Odpowiedz
T4 jest podłączony do niestandardowego mechanizmu narzędziowego (IVsSingleFileGenerator) w systemach projektowych C#/VB, co daje mu uruchamianie przy zapisywaniu, uruchamianie menu niestandardowego narzędzia, a także uruchamianie przy zachowaniu przełączania kart - wszystko za cenę implementacji prosty interfejs.
Niestety oznacza to, że T4 również nie ma praktycznie żadnej kontroli nad tymi zachowaniami, które są standardem dla narzędzi niestandardowych.
Alternatywą może być użycie obsługi T4 MsBuild w zestawie SDK modelowania i wizualizacji VS, aby wykonać T4 w czasie kompilacji, a następnie wyłączyć niestandardowe narzędzie. Zapytam mojego kolegę, który zbudował obsługę msbuild, jeśli używa niestandardowego narzędzia do identyfikacji zestawu szablonów i nie wysyła go z powrotem do wątku.
Szablony T4 są wykonywane po zapisaniu pliku. Jeśli masz konfigurację VS do automatycznego zapisywania, gdy odsuniesz kartę od pliku, który może wyjaśnić zachowanie. Przejrzyj swoją konfigurację VS, aby ustalić, czy VS zapisuje plik, gdy znikniesz z karty.
Miałem dokładnie ten sam problem. Wykonałem kroki opisane w tym artykule pod tytułem http://msdn.microsoft.com/en-us/library/ee789839.aspx dotyczące dzielenia szablonów na inny projekt i udostępniania plików wyjściowych.
To szczegóły, jak wyłączyć TextTemplatingFileGenerator narzędzia dołączonego do szablonu klikając prawym przyciskiem myszy szablon i wyczyszczenie CustomTool nieruchomości. Powoduje to zatrzymanie kodu generującego szablon po zapisaniu ... ale NADAL NAPRAWIA przy przełączaniu kart!
Myślę, że jedynym sposobem obejścia tego problemu byłoby przeniesienie całego kodu szablonu do nowego pliku z innym sufiksem (jak ttinclude lub t4 lub coś podobnego), a następnie dołączenie tego pliku do rzeczywistego pliku szablonu T4 przy użyciu zawierać dyrektywę. W ten sposób nigdy nie będziesz musiał otwierać tego pliku, aby edytować szablon, aby nie działał przez przypadek.
Tak w jednym pliku o nazwie MyTemplate.tt:
<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="Include\MyTemplateCodeBehind.t4" #>
<#@ output extension=".vb"#>
<# ' Nothing to see here! #>
Podczas gdy w drugim pliku o nazwie MyTemplateCodeBehind.t4:
<#@ template language="VB" debug="false" hostspecific="true"#>
<#
For Each something In somecollection
#>
<#= something.PrintMyCode() #>
<#
Next
#>
Spróbuj zaraz po dyrektyw kompilacji dodać powrót do wyjść metody
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@
output extension="Repository.cs"#><#
return string.Empty; //<-- add this line!!!
...
Co robię (chyba zły sposób) pisze na początku pliku tt linia wyjątek jak:
<# throw new Exception(); #>
Bo wyjątek zatrzymanie procesu i kiedy zakończyć wszystkie prace I po prostu trzeba usunąć tę linię. :)
- 1. Jak mogę zatrzymać działanie usługi Azure App Service wyświetlane za każdym razem, gdy otwieram nowe rozwiązanie?
- 2. Zobacz kontroler pochodzenie zmienia się za każdym razem, gdy przedstawił
- 3. FullGC dzieje się za każdym razem, gdy działa CMS
- 4. Dlaczego ta funkcja zwraca za każdym razem inną wartość?
- 5. dlaczego cykl setInterval() staje się szybszy za każdym razem?
- 6. Przeciek pamięci za każdym razem, gdy wydano UIScrollView.
- 7. Pusty biały ekran za każdym razem, gdy uruchamiam symulator iOS
- 8. Powracaj różne wartości za każdym razem, gdy oczekiwane jest jMockit
- 9. Dlaczego Travis CI pobiera wszystko za każdym razem, gdy buduje?
- 10. glVertexAttribPointer potrzebny za każdym razem, gdy wywoływany jest glBindBuffer?
- 11. Kod modułu ES6 wykonywany za każdym razem, gdy jest importowany
- 12. Pulsuj szablon za każdym razem, gdy jest renderowany w Meteoru
- 13. JSON.stringify ucieka podwójne cytaty za każdym razem, gdy stringified
- 14. Dlaczego otrzymuję ostrzeżenie za każdym razem, gdy używam malloc?
- 15. Niewłaściwe widoki za każdym razem, gdy otwieram scenorys
- 16. Statechange jest uruchamiane za każdym razem, gdy robię stan push
- 17. Projekt biblioteki Xcode 7.3 kompiluje się za każdym razem
- 18. requestAccessToEntityType - raz lub za każdym razem?
- 19. jak wyłączyć automatyczne uruchamianie szablonu T4 w Visual Studio (2012)?
- 20. Wtyczka GWT Maven rekompiluje się za każdym razem
- 21. Julia kompiluje scenariusz za każdym razem?
- 22. Inicjalizacja Android AudioRecord kończy się niepowodzeniem za każdym razem
- 23. Jak zatrzymać automatyczne przesuwanie linii kodu do następnej linii za każdym razem, gdy zmieniam rozmiar okna edytora?
- 24. Dlaczego za każdym razem, gdy zmienia się rozmiar okna WPF, występuje czarne opóźnienie?
- 25. AVAssetExportSession nie powiedzie się za każdym razem (błąd -12780)
- 26. Wiele skrótów: za każdym razem dodawaj sól?
- 27. Chcesz, aby procmail uruchamiał niestandardowy skrypt python, za każdym razem, gdy pojawia się nowa poczta
- 28. Dlaczego parametr hashCode() obiektu ArrayList zmienia się za każdym razem, gdy dodajesz nowy element?
- 29. Jak wykonać Mock zwrócić nową listę za każdym razem, gdy metoda jest wywoływana za pomocą Moq
- 30. uruchom `nvm use` automatycznie za każdym razem, gdy znajduje się plik .nvmrc w katalogu
Używam T4 Toolbox, który generuje wiele plików i tym samym modyfikuje rozwiązanie. Nie jestem pewien, czy zadziała w MsBuild. Uruchamianie T4 tylko w czasie kompilacji nie jest dla mnie żadną opcją, chcę widzieć wyniki natychmiast, kiedy zapisuję plik T4. Ale możesz podać informacje na temat używania MsBuild dla innych, którzy znajdą to pytanie. Może być dla nich przydatne. – Athari
Rozumiem - nie próbowaliśmy integrować dwóch - może to zrobić Oleg. Właśnie potwierdziłem, że niestandardowe narzędzie nie jest już wymagane dla msbuild, ale zamiast tego należy zmienić typ elementu w pliku csproj/vbproj z None/Compile na T4Transform lub T4Preprocess. Pliki wyjściowe przestaną być częścią twojego projektu. Istnieją metadane, które mogą przekierować je do pośredniego folderu obj lub gdzieś podobnego. – GarethJ