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:
<appSettings> <add key="webpages:Version" value="3.0.0.0" /> ... </appSettings>
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…
Leave a Comment