Strona .NET Core MVC nie jest odświeżana po zmianach

117

Tworzę .NET Core MVC w najnowszej wersji 2.2. Mam problem, gdy wprowadzam zmiany w pliku CSHTML i odświeżam stronę, moje zmiany nie są odzwierciedlane w przeglądarce. Muszę ponownie uruchomić projekt, aby zobaczyć moje zmiany. Dzieje się to już od jakiegoś czasu, więc nie jestem pewien, jaka zmiana spowodowała ten problem.

Próbowałem używać funkcji „Opróżnij pamięć podręczną i ponowne załadowanie” w Chrome, a także innych przeglądarek bezskutecznie. Dzieje się tak w systemach Windows i Mac przy użyciu Visual Studio dla komputerów Mac i VS Code

W domyślnym projekcie .Net Core działa dobrze, więc coś w moim projekcie musi się zmienić po drodze. Zastanawiam się, od czego mam zacząć, aby debugować ten problem? Próbowałem wykomentować prawie wszystko w moim Startup.csi Program.csbez rozdzielczości.

kevskree
źródło
Napotykam ten sam wyjątek MissingMethodException, o którym wspomniałeś poniżej ... Czy kiedykolwiek to rozgryzłeś? Jeśli tak, czy mógłbyś odpowiedzieć na swoje pytanie?
JohnOsborne

Odpowiedzi:

63

Wygląda na to, że wprowadzono zmianę w ASP.NET Core 2.2 (i nie mogę znaleźć żadnych ogłoszeń dotyczących tej zmiany). Jeśli nie jesteś jawnie uruchomiony w środowisku „programistycznym”, widoki Razor są kompilowane i nie zobaczysz żadnych zmian wprowadzonych w pliku .cshtml

Możesz jednak wyłączyć to za pomocą niektórych konfiguracji w klasie startowej w następujący sposób.

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

ASP.NET dla rdzenia 3,0 i wyższa, patrz Alexander Christov za odpowiedź .

Chris Aitchison
źródło
2
Dziękuję Ci. Wygląda jednak na to, że kiedy to włączam, wprowadzam zmianę w kodzie HTML, a następnie odświeżam, pojawia się następujący wyjątek: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Masz pojęcie, co oznacza ten wyjątek? Wszystkie pozostałe strony ładują się poprawnie. Dopiero gdy
edytuję
3
To zadziałało dla mnie. Aby ustawić go w zależności od środowiska, Dodaj IHostingEnvironment do metody Startup i utrzymuj we właściwości. Następnie użyj czegoś takiego jakservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious,
1
dzięki, zadziałało. Jednak myślę, że to dość niezręczne i głupie, że Microsoft oficjalnie nie ogłasza takich dużych zmian.
Code_Worm
@kevskree to samo dzieje się ze mną
JohnOsborne
1
@Mayank Gupta: zobacz odpowiedź Alexandra Christova poniżej ( stackoverflow.com/a/57637903/198990 ). Jego odpowiedź zadziałała dla mnie (3.1).
Sandor Drieënhuizen
222

W ASP.NET 3.0 i wyższe podstawowej , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangenie jest dostępna.

Zaskoczony, że odświeżenie widoku podczas działania aplikacji nie zadziałało, odkryłem następujące rozwiązanie:

  1. Dodaj pakiet NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation do projektu
  2. Dodaj następujące informacje Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Oto pełne wyjaśnienie ciekawskich ...

HTH

Aleksandra Christowa
źródło
1
Z jakiegoś powodu to nie zadziałało. Jestem na Macu, jeśli to robi różnicę.
Nakul Tiruviluamala
@Nakul Jaka jest używana wersja .net core?
Alexander Christov
7
To działało świetnie dla mnie na komputerach Mac i ASP.NET Core 3.1.
user3071284
4
Dzięki za tę wskazówkę; pracował dla mnie na .Net Core 3.1.2
jawa
1
Wowsers! 15 lat pracy w .NET i kiedyś było to łatwe. 1 dzień pracy z .NET Core i wszystko wydaje się zepsute. A tak na poważnie - kto zdecydował, że dobrym pomysłem jest domyślne skompilowanie kodu HTML i niezmienność go w czasie wykonywania, a następnie skłonienie programistów do poszukiwania rozwiązania?
Jason Snelders
53

Właśnie utworzyłem nowy projekt przy użyciu najnowszego szablonu ASP.NET MVC Core 3.1 i zmieniłem następujące elementy, aby włączyć rekompilację środowiska uruchomieniowego do debugowania:

Odwołanie pakietu NuGet - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (IServiceCollection services) WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

TERAZ:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...
Jeremiah N.
źródło
1
To najlepsza odpowiedź bez czytania artykułu Aleksa, który warto przeczytać.
Waragi
10

Powinieneś po prostu dodać to:

services.AddControllersWithViews();

do metody ConfigureService .

Należy pamiętać, że poniższy kod nie jest dostępny w ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();
Alireza Abdollahnejad
źródło
7
Musisz zainstalować pakiet NuGet, aby działał Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta
5

Poniżej pomogło mi, gdy widoki były w oddzielnym projekcie.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}
smoq
źródło
1
To jedyna odpowiedź, która zadziałała dla mnie podczas pracy z bibliotekami klas Razor. Twoje zdrowie!
Sipke Schoorstra
3

Korzystając z uruchomionej aplikacji .net core 2.2 z poleceniem, dotnet watch runprojekt jest restartowany po każdej zmianie

nanquim
źródło
1

Udało mi się rozwiązać ten problem w Rider, dodając ASPNETCORE_ENVIRONMENT=Developmentzmienną środowiskową.

user1613512
źródło
1

Dla tych, którzy używają Net core 3.0 lub nowszego

  1. Przejdź do Narzędzia → Menedżer pakietów NuGet → Zarządzaj pakietami NuGet w celu znalezienia rozwiązania

  2. przejdź do zakładki przeglądania, aby przeglądać z internetu

  3. wyszukaj RuntimeCompilation Kliknij Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

  4. zainstaluj na swoich projektach aktualną stabilną wersję

  5. otwórz plik Startup.cs

  6. przejdź do metody void ConfigureServices

  7. dodaj linię: services.AddControllersWithViews().AddRazorRuntimeCompilation();

  8. jesteś ZROBIONE

Uruchom ponownie i zobacz. Teraz możesz odświeżyć swoje widoki lub strony.

GeraGamo
źródło
0

Istnieją dwa sposoby rozwiązania tego problemu:

1 . Sprawdź uprawnienia folderu, w którym znajduje się plik .sln. Może wystąpić problem z uprawnieniami dostępu do plików, ponieważ program Visual Studio może nie uzyskiwać dostępu do plików, gdy działa serwer ekspresowy IIS, więc za każdym razem, gdy trzeba będzie odzwierciedlić nowe zmiany .cshtml zrestartuj serwer, więc sugeruję edycję uprawnień dostępu do folderów poprzez:

Kliknij prawym przyciskiem myszy folder-> właściwości-> bezpieczeństwo-> kliknij przycisk edycji -> zaznacz wszystkie opcje-> zapisz .

Uruchom ponownie program Visual Studio, aby zobaczyć zmiany.

Jeśli to nie zadziała, użyj opcji 2.

2. W swoim projekcie w pliku startup.cs dodaj poniższy wiersz ConfigureServices () w metodzie:

services.AddMvc (). AddRazorOptions (options => options.AllowRecompilingViewsOnFileChange = true);

Omkar Nevase
źródło