Zwykle widoki nie są kompilowane aż do momentu publikacji i pierwszego zapytania. Czasami jednak warto, aby były one kompilowane w czasie pracy z kodem. Bardzo łatwo popełnić literówkę, która nie będzie wykryta aż do momentu, gdy użytkownik będzie chciał wejść na tą stronę. Przy wielu widokach jest to dość niewygodne i może okazać się bardzo uciążliwe. Załóżmy, że mamy następujący widok z błędem:
@model dynamic @{ ViewBag.Title = "title"; Layout = null; } @NieistniejacaZmienna
Strona skompiluje się bez błędu, co jest problemem. Dopiero, gdy użytkownik spróbuje otworzyć stronę dostanie następujący wyjątek:
Compilation Error Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. Compiler Error Message: CS0103: The name 'NieistniejacaZmienna' does not exist in the current context Source Error: Line 7: Line 8: Line 9: @NieistniejacaZmienna
Na szczęście istnieje dość łatwy sposób na zmuszenie VS do skompilowania widoków. Wystarczy otworzyć projekt w notatniku i ustawić następującą właściwość na true:
<PropertyGroup> <MvcBuildViews>true</MvcBuildViews> </PropertyGroup>
Poskutkuje to następującym błędem już na etapie kompilacji:
Error 1 The name 'NieistniejacaZmienna' does not exist in the current context
Trzeba się oczywiście liczyć, że jest to dodatkowe obciążenie i wydłuży trochę czas publikacji.
Jakiś czas temu pisałem o czymś podobnym – można również użyć Razor Generator. Po zainstalowaniu, do plików .cshtml dodawany jest plik .cs, który przegenerowuje się przy każdej zmianie w widoku i podczas kompilacji rzuca błędami. Taka alternatywa 😉
Pozdrawiam
MJ
Warto ustawić ten parametr tylko w przypadku kompilacji w trybie Release (w przypadku większych projektów kompilacja widoków trwa dość długo): http://www.developmentalmadness.com/archive/2009/01/27/aspnet-mvc-compile-your-views-for.aspx
Cenna wskazówka, dzięki.
Do prawdy nie rozumiem, dlaczego Microsoft ukrywa tego rodzaju opcje a właściwie nie dodaje do nich skrótu w ustawieniach projektu w VS. Podobna sytuacja z ustawieniem metody porównywania plików przy bublishu. Trzeba ręcznie dokleić true
w pliku .pubxml aby preview brał pod uwagę sumę kontrolna pliku a nie wyłącznie datę modyfikacji…
Pozdrawiam
//sorry za duplikat ale mi tagi zjadło 🙂
Cenna wskazówka, dzięki.
Do prawdy nie rozumiem, dlaczego Microsoft ukrywa tego rodzaju opcje a właściwie nie dodaje do nich skrótu w ustawieniach projektu w VS. Podobna sytuacja z ustawieniem metody porównywania plików przy publishu. Trzeba ręcznie dokleić
linijkę w pliku .pubxml aby preview brał pod uwagę sumę kontrolną pliku a nie wyłącznie datę modyfikacji…
Więcej info tu: http://msdn.microsoft.com/en-us/library/ee942158(v=vs.110).aspx#use_checksum
Pozdrawiam