La pagina .NET Core MVC non si aggiorna dopo le modifiche


111

Sto creando un .NET Core MVC sull'ultima versione 2.2. Ho un problema quando apporto modifiche al file CSHTML e aggiorno la pagina, le mie modifiche non si riflettono nel browser. Devo riavviare il progetto per vedere le mie modifiche. Questo accade da un po 'di tempo, quindi non sono esattamente sicuro di quale cambiamento abbia causato questo problema.

Ho provato a utilizzare "Empty Cache and Hard Reload" di Chrome così come altri browser senza alcun risultato. Ciò accade su Windows e Mac utilizzando sia Visual Studio per Mac che VS Code

In un progetto .Net Core predefinito funziona bene, quindi deve esserci qualcosa nel mio progetto che è cambiato lungo la strada. Mi chiedo da dove devo iniziare per eseguire il debug di questo problema? Ho provato a commentare quasi tutto nel mio Startup.cse Program.cssenza risoluzione.


Sto incontrando la stessa MissingMethodException che hai menzionato di seguito ... Hai mai capito? Se sì, potresti rispondere alla tua domanda?
JohnOsborne

Risposte:


59

Sembra che sia stata apportata una modifica in ASP.NET Core 2.2 (e non riesco a trovare alcun annuncio su questa modifica). Se non stai eseguendo esplicitamente nell'ambiente di 'Sviluppo', le viste Razor vengono compilate e non vedrai alcuna modifica apportata al file .cshtml

Puoi comunque disattivarlo usando alcune configurazioni nella tua classe di avvio come segue.

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

Per ASP.NET Core 3.0 e versioni successive, vedere la risposta di Alexander Christov .


1
Grazie. Tuttavia, sembra che quando lo abilito, apporto una modifica all'html e quindi aggiorno, ottengo la seguente eccezione: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Qualche idea su cosa significhi questa eccezione? Tutte le altre pagine vengono caricate correttamente. Solo quando modifico un file e
aggiorno

3
Questo ha funzionato per me. Per impostarlo in base all'ambiente, aggiungi IHostingEnvironment al metodo Startup e mantieni una proprietà. Quindi usa qualcosa comeservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious

1
grazie ha funzionato. Tuttavia penso che sia piuttosto imbarazzante e sciocco che Microsoft non annunci ufficialmente grandi cambiamenti come questo.
Code_Worm

@kevskree la stessa cosa sta accadendo a me
JohnOsborne

1
@ Mayank Gupta: vedi la risposta di Alexander Christov di seguito ( stackoverflow.com/a/57637903/198990 ). La sua risposta ha funzionato per me (3.1).
Sandor Drieënhuizen

202

In ASP.NET core 3.0 e versioni successive , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangenon è disponibile.

Sorpreso che l'aggiornamento di una vista mentre l'app è in esecuzione non funzionasse, ho scoperto la seguente soluzione:

  1. Aggiungere il pacchetto NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation al progetto
  2. Aggiungi quanto segue in Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Ecco la spiegazione completa per i curiosi ...

HTH


1
Questo non ha funzionato per me per qualsiasi motivo. Sono su Mac se questo fa la differenza.
Nakul Tiruviluamala

@Nakul qual è la versione di .net core che usi?
Alexander Christov

Quando ho usato questo comando: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/ apparentemente ho ottenuto due risposte: 2.1.13 e 3.0.0
Nakul Tiruviluamala

7
Questo ha funzionato alla grande per me su Mac e ASP.NET Core 3.1.
user3071284

4
Grazie per questo suggerimento; ha funzionato per me su .Net Core 3.1.2
jawa

49

Ho appena creato un nuovo progetto utilizzando l'ultimo modello ASP.NET MVC Core 3.1 e ho modificato quanto segue per ottenere la ricompilazione runtime abilitata per il debug:

Pacchetto NuGet di riferimento: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (servizi IServiceCollection) ERA:

// stuff...

services.AddControllersWithViews();

// more stuff...

ADESSO:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
Questa è la migliore risposta senza leggere l'articolo pubblicato da Alex, che vale la pena leggere.
Waragi

9

Dovresti semplicemente aggiungere questo:

services.AddControllersWithViews();

al metodo ConfigureService .

Tieni presente che il codice seguente non è disponibile in ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

6
È necessario installare il pacchetto nuget per farlo funzionare Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

4

Di seguito mi ha aiutato quando le visualizzazioni erano in un progetto separato.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}

Questa è l'unica risposta che ha funzionato per me quando lavoro con le librerie di classi Razor. Saluti!
Sipke Schoorstra


1

Sono stato in grado di risolvere questo problema in Rider aggiungendo la ASPNETCORE_ENVIRONMENT=Developmentvariabile d'ambiente.



0

Esistono due modi per risolvere questo problema:

1 . Controlla le autorizzazioni della cartella in cui è presente il tuo file .sln. Potrebbe esserci un problema con le autorizzazioni di accesso ai file poiché Visual Studio potrebbe non essere quello di accedere ai file quando il server IIS Express è in esecuzione, quindi per riflettere le nuove modifiche .cshtml ogni volta che è necessario riavviare il server, quindi suggerisco di modificare i permessi di accesso alla cartella:

Fare clic con il tasto destro sulla cartella-> proprietà-> sicurezza-> fare clic sul pulsante di modifica -> selezionare tutte le opzioni-> salvare .

Riavvia Visual Studio per vedere le modifiche.

Se questo non funziona, utilizzare l'opzione 2.

2. Nel tuo progetto nel file startup.cs aggiungi questo sotto la riga ConfigureServices () nel metodo:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.