Błędy IntelliSense po aktualizacji ASP.NET MVC

Na swoim kanale na Youtube jestem w trakcie serii gdzie pracuję na starym kodzie. I przy okazji tej pracy zrobiłem aktualizację wersji .NET Frameworka do 4.7.2 i jednocześnie wersji ASP.NET MVC z 4.0 na 5.2.7. Wszystko przeprowadziłem z poziomu Visual Studio i NuGet Package Managera. I pojawił się problem.

Nie widzę tego

Problem związany z narzędziem IntelliSense w plikach *.cshtml z widokami. Kiedy tylko otwierałem jakikolwiek widok to nagle zacząłem dostawać informacje o błędach w standardowych elementach, takich jak @model czy ViewBag:

Sama aplikacja działała bez problemu. Mogłem ją uruchomić i po prostu otwierać te widoki. Jednak problem jest tym bardziej utrudniający pracę, że jestem w trakcie refaktoringu kodu więc dużo w nim zmieniam. A że dużo zmieniam to chcę wiedzieć czy zmieniłem wszystko dobrze i gdzieś mi nie brakuje nowego obiektu. Dlatego musiałem ten problem rozwiązać.

 

Po wielu próbach czyszczenia cachu czy ponownej instalacji pakietów, tak jak radziły różne osoby na różnych stronach w końcu trafiłem na rozwiązanie.

Zapomniałem o tym

Trafiłem na stronę https://world.episerver.com/blogs/Eric-Pettersson/Dates/2014/10/problem-with-web-config-after-upgrade-between-mvc-4-and-mvc-5-5-2-0-0-and-3-0-0-0-and-missing-intellisense-in-visual-studio gdzie zobaczyłem fragment głównego web.configa:

I pomyślałem, że szukałem wszystkich wersji Razora i AspNet w web.configach, ale tej wartości nie sprawdzałem. Zerknąłem na swoją konfigurację i widzę, że wersja jest ustawiona na „2.0.0.0„.

Skoro nic innego nie działało to czemu by nie spróbować. I postanowiłem ją zmienić na „3.0.0.0„. Otworzyłem ponownie plik widoku i…

Żadnych błędów związanych ze standardowymi elementami! Widzę od razu błędy w modelu czyli to czego oczekiwałem! Sukces.

 

Okazało się, że aktualizacja wersji ASP.NET MVC aktualizuje konfigurację tylko częściowo. Nie zmienia większości wersji bibliotek. I trzeba je zmienić ręcznie. A w przypadku Aktualizacji z wersji 4.0 na 5.* biblioteki związane z Razorem zmieniają wersję z 2.0.0.0 na 3.0.0.0 właśnie.

Dlatego też pierwszy błąd jaki się pojawia i jaki łatwo naprawić związany jest z konfiguracją Razora. W pliku Web.config znajdującym się w katalogu Views (!) trzeba się upewnić, że dla ASP.NET MVC 5 wersja Razora ustawiona jest na 3.0.0.0. Inaczej dostaniemy błąd mówiący o tym, że nie udało się załadować assembly:

Podsumowując

Temat wydaje się niepotrzebny. W końcu kto teraz korzysta z ASP.NET MVC 4? Przecież mamy ASP.NET Core i inne tego typu wynalazki.

Jednak nie można zapominać, że sporo firmowego softu nadal jest w starszych wersjach .NETa. Nie przeszły one na Core bo i nie było takiej potrzeby. Wiąże się to z dużymi zmianami. Praktycznie przepisaniem aplikacji. Ale aktualizacja bibliotek to już inna sprawa. I może się okazać, że zwykły update w NuGet Package Managerze zabierze nam kilka dni na szukanie rozwiązania błędów…

Wiesz, że możesz mnie znaleźć nie tylko na tym blogu?

Wszystkie miejsca, w których udzielam się w internecie poznacz na stronie codewin.pl.

Szukasz książek dla programistów i jednocześnie chcesz wesprzeć tego bloga? Sprawdź ofertę wydawnictwa Helion klikając w TEN LINK.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *