.NET Core MVC-Seite wird nach Änderungen nicht aktualisiert

111

Ich baue eine .NET Core MVC auf der neuesten Version 2.2. Ich habe ein Problem, wenn ich Änderungen an der CSHTML-Datei vornehme und die Seite aktualisiere. Meine Änderungen werden nicht im Browser angezeigt. Ich muss das Projekt neu starten, um meine Änderungen zu sehen. Dies geschieht bereits seit einiger Zeit, daher bin ich mir nicht ganz sicher, welche Änderung dieses Problem verursacht hat.

Ich habe versucht, den "Leeren Cache und Hard Reload" des Chrome sowie andere Browser ohne Erfolg zu verwenden. Dies geschieht unter Windows und Mac mit Visual Studio für Mac und VS Code

In einem Standard-.Net Core-Projekt funktioniert es einwandfrei, daher muss sich etwas in meinem Projekt geändert haben. Ich frage mich, wo ich anfangen muss, um dieses Problem zu beheben. Ich habe versucht, fast alles in meinem Startup.csund Program.csohne Auflösung zu kommentieren .

kevskree
quelle
Ich stoße auf dieselbe MissingMethodException, die Sie unten erwähnt haben ... Haben Sie es jemals herausgefunden? Wenn ja, könnten Sie bitte Ihre Frage beantworten?
JohnOsborne

Antworten:

57

Es scheint, dass in ASP.NET Core 2.2 eine Änderung vorgenommen wurde (und ich kann keine Ankündigungen zu dieser Änderung finden). Wenn Sie nicht explizit in der Entwicklungsumgebung ausgeführt werden, werden die Rasiermesseransichten kompiliert und es werden keine Änderungen an der CSHT-Datei angezeigt

Sie können dies jedoch mit einer Konfiguration in Ihrer Startup-Klasse wie folgt deaktivieren.

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

Informationen zu ASP.NET Core 3.0 und höher finden Sie in der Antwort von Alexander Christov .

Chris Aitchison
quelle
1
Danke dir. Wenn ich dies aktiviere, eine Änderung im HTML-Code vornehme und dann aktualisiere, wird jedoch die folgende Ausnahme angezeigt: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Gibt es eine Idee, was diese Ausnahme bedeutet? Alle anderen Seiten werden einwandfrei geladen. Nur wenn ich eine Datei bearbeite und
aktualisiere, erhalte
3
Das hat bei mir funktioniert. Um es abhängig von der Umgebung festzulegen, fügen Sie der Startmethode IHostingEnvironment hinzu und bleiben Sie in einer Eigenschaft erhalten. Dann verwenden Sie etwas wieservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious
1
danke es hat funktioniert. Ich finde es jedoch ziemlich umständlich und albern, dass Microsoft solche großen Änderungen nicht offiziell ankündigt.
Code_Worm
@kevskree das gleiche passiert mir
JohnOsborne
1
@ Mayank Gupta: siehe Alexander Christovs Antwort unten ( stackoverflow.com/a/57637903/198990 ). Seine Antwort hat bei mir funktioniert (3.1).
Sandor Drieënhuizen
201

In ASP.NET Core 3.0 und höher , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangeist nicht verfügbar.

Überrascht, dass das Aktualisieren einer Ansicht während der Ausführung der App nicht funktioniert hat, habe ich die folgende Lösung gefunden:

  1. Hinzufügen dem Projekt das NuGet-Paket Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation hinzu
  2. Fügen Sie Folgendes hinzu Startup.cs :

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Hier ist die vollständige Erklärung für die Neugierigen ...

HTH

Alexander Christov
quelle
1
Das hat bei mir aus irgendeinem Grund nicht funktioniert. Ich bin auf dem Mac, wenn das einen Unterschied macht.
Nakul Tiruviluamala
@ Nakul Was ist die .net-Kernversion, die Sie verwenden?
Alexander Christov
Als ich diesen Befehl benutzte: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/ bekam ich anscheinend zwei Antworten: 2.1.13 und 3.0.0
Nakul Tiruviluamala
7
Dies funktionierte hervorragend für mich auf Mac und ASP.NET Core 3.1.
user3071284
4
Danke für diesen Hinweis; arbeitete für mich an .Net Core 3.1.2
jawa
49

Ich habe gerade ein neues Projekt mit der neuesten ASP.NET MVC Core 3.1-Vorlage erstellt und Folgendes geändert, um die Laufzeit-Neukompilierung für Debug zu aktivieren:

Referenz NuGet-Paket - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (IServiceCollection-Dienste) WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

JETZT:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...
Jeremiah N.
quelle
1
Dies ist die beste Antwort, ohne den Artikel von Alex zu lesen, der es wert ist, gelesen zu werden.
Waragi
9

Sie sollten dies einfach hinzufügen:

services.AddControllersWithViews();

auf die ConfigureService- Methode.

Beachten Sie, dass der folgende Code in ASP.NET Core 3.1 nicht verfügbar ist:

services.AddControllersWithViews().AddRazorRuntimeCompilation();
Alireza Abdollahnejad
quelle
6
Sie müssen das Nuget-Paket installieren, damit es funktioniert. Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta
4

Unten hat mir geholfen, als Ansichten in einem separaten Projekt waren.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}
smoq
quelle
Dies ist die einzige Antwort, die bei der Arbeit mit Razor Class Libraries für mich funktioniert hat. Prost!
Sipke Schoorstra
3

Wenn Sie die .net Core 2.2-App mit Befehl dotnet watch runausführen, wird das Projekt nach jeder Änderung neu gestartet

Straßenbahn
quelle
1

Ich konnte dieses Problem in Rider durch Hinzufügen der ASPNETCORE_ENVIRONMENT=DevelopmentUmgebungsvariablen lösen .

user1613512
quelle
0

Es gibt zwei Möglichkeiten, um dieses Problem zu beheben:

1 . Überprüfen Sie die Berechtigungen des Ordners, in dem sich Ihre .sln-Datei befindet. Möglicherweise liegt ein Problem mit den Dateizugriffsberechtigungen vor, da Visual Studio möglicherweise nicht auf Dateien zugreift, wenn der IIS Express-Server ausgeführt wird, um jedes Mal neue .cshtml-Änderungen zu berücksichtigen Starten Sie den Server neu. Ich empfehle daher, die Ordnerzugriffsberechtigungen wie folgt zu bearbeiten:

Klicken Sie mit der rechten Maustaste auf Ordner-> Eigenschaften-> Sicherheit-> Klicken Sie auf die Schaltfläche Bearbeiten -> Aktivieren Sie alle Optionen-> Speichern .

Starten Sie Visual Studio neu, um Änderungen anzuzeigen.

Wenn dies nicht funktioniert, verwenden Sie die Option 2.

2. Fügen Sie in Ihrem Projekt in der Datei startup.cs die folgende Zeile hinzu: ConfigureServices () in Methode:

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

Omkar Nevase
quelle