Wprowadzenie

Czasami trudno nadążyć jest za ilością zmian/modyfikacji/aktualizacji, które pojawiają się w kolejnych wersjach frameworka. Jakiś czas temu tworząc nowy projekt w oparciu o ASP.NET Core 2.2 spotkałem się z ciekawym problemem, którego nie widziałem w poprzednich wersjach.

Zapisanie zmian po stronie widoku oraz odswieżenie zakładki w przeglądarce nie doprowadziło do wyświetlenia zaktualizowanej wersji witryny. Ten efekt był możliwy dopiero po ponownym odpaleniu projektu…

Tamtym razem znalazłem rozwiązanie polegające na nieznacznej edycji pliku startowego projektu i dodaniu poniższej linii:

services.AddControllersWithViews();

ASP.NET Core 3.1

Jak doskonale wiecie, ostatnio byłem skupiony na poradniku dotyczącym Angulara. Wraz z jego ukończeniem wróciłem do dodawania wpisów dotyczących platformy .NET. Tworząc poprzedni wpis dotyczący Font Awesome (możecie go znaleźć tutaj) ponownie natrafiłem na powyższy problem. Co gorsza, wspomniane powyższej rozwiązanie przestało działać.

Rozpocząłem więc poszukiwania celem zrozumienia dlaczego taka ważna funkcjonalność została usunięta z frameworka. Przeszukując różne fora natrafiłem na oficjalny komunikat:

As a consequence of cleaning up the ASP.NET Core shared framework to not depend on Roslyn, support for runtime compilation of Razor views and Razor Pages is being moved to a separate package. Applications that require runtime compilation or re-compilation of Razor files should
  • Add a reference to the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation package
  • Update the application's ConfigureServices to include a call to AddMvcRazorRuntimeCompilation:
    services.AddMvc()
        .AddMvcRazorRuntimeCompilation();
    
Całą treść wpisu możecie znaleźć tutaj: https://github.com/aspnet/Announcements/issues/343

Rozwiązanie

Komunikat, komunikatem – sprawdźmy czy w praktyce wszystko działa.

Wykorzystując Visual Studio 2019 tworzę nowy projekt w oparciu o ASP.NET Core 3.1: Tworzenie nowego projektu w ASP.NET Core

W kolejnym kroku dodajemy wymaganą paczkę: Tworzenie nowego projektu w ASP.NET Core

Następnie modyfikujemy plik konfiguracyjny naszego projektu, tj. Startup.cs dodając wspomniany powyżej kod w metodzie ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    // wymagana paczka: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    services.AddMvc().AddRazorRuntimeCompilation();
}
Ostatni krok to sprawdzenie czy wszystko działania jak należy:

Podsumowanie

Dostałem od Was sporo wiadomości w których prosicie o dołączenie kodu projektu, który przygotowałem w ramach tworzenia wpisu. Osoby, które są ze mną nieco dłużej wiedzą, iż zawsze podkreślałem, że nie ma niczego lepszego niż własna implementacja – wtedy najłatwiej przyswoić wiedzę.

Czasami jednak może się zdarzyć (w przypadku nieco bardziej skomplikowanych projektów), że coś zostanie pominięte, zabraknie jakiejś paczki lub po prostu checie zobaczyć projekt, który utworzyłem.

Od tego wpisu będę dodawał na końcu artykułu sekcję ‘Pliki’ z której będziecie mogli pobrać dany projekt spakowany do pliku .zip. Pamiętajcie, że jestem otwarty na Wasze sugestie