La page .NET Core MVC ne s'actualise pas après les modifications

113

Je construis un MVC .NET Core sur la dernière version 2.2. J'ai un problème lorsque j'apporte des modifications au fichier CSHTML et que j'actualise la page, mes modifications ne sont pas reflétées dans le navigateur. Je dois redémarrer le projet pour voir mes modifications. Cela se produit depuis un certain temps maintenant, je ne sais donc pas exactement quel changement a causé ce problème.

J'ai essayé d'utiliser le "Cache vide et le rechargement dur" du chrome ainsi que d'autres navigateurs en vain. Cela se produit sur Windows et Mac en utilisant à la fois Visual Studio pour Mac et VS Code

Dans un projet .Net Core par défaut, cela fonctionne bien, donc ce doit être quelque chose dans mon projet qui a changé en cours de route. Je me demande par où je dois commencer pour déboguer ce problème? J'ai essayé de commenter presque tout dans mon Startup.cset Program.cssans résolution.

kevskree
la source
Je rencontre la même MissingMethodException que vous avez mentionnée ci-dessous ... L'avez-vous déjà compris? Si oui, pouvez-vous répondre à votre question?
JohnOsborne

Réponses:

59

Il semble qu'il y ait eu un changement dans ASP.NET Core 2.2 (et je ne trouve aucune annonce concernant ce changement). Si vous n'exécutez pas explicitement dans l'environnement 'Développement', les vues Razor sont compilées et vous ne verrez aucune modification apportée au .cshtml

Vous pouvez cependant désactiver cela en utilisant une configuration dans votre classe de démarrage comme suit.

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

Pour ASP.NET Core 3.0 et supérieur, consultez la réponse d' Alexander Christov .

Chris Aitchison
la source
2
Je vous remercie. Cependant, il semble que lorsque j'active cela, modifie le code HTML, puis actualise, j'obtiens l'exception suivante: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Une idée de ce que signifie cette exception? Toutes les autres pages se chargent correctement. Ce n'est que lorsque je modifie un fichier et actualise que j'obtiens cette erreur
kevskree
3
Cela a fonctionné pour moi. Pour le définir en fonction de l'environnement, ajoutez IHostingEnvironment à la méthode Startup et persistez dans une propriété. Ensuite, utilisez quelque chose commeservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious
1
merci cela a fonctionné. Cependant, je pense que c'est assez gênant et idiot que Microsoft n'annonce pas officiellement de grands changements comme celui-ci.
Code_Worm
@kevskree la même chose m'arrive
JohnOsborne
1
@Mayank Gupta: voir la réponse d'Alexandre Christov ci-dessous ( stackoverflow.com/a/57637903/198990 ). Sa réponse a fonctionné pour moi (3.1).
Sandor Drieënhuizen le
207

Dans ASP.NET Core 3.0 et supérieur , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangen'est pas disponible.

Surpris que l'actualisation d'une vue pendant que l'application s'exécute ne fonctionne pas, j'ai découvert la solution suivante:

  1. Ajouter le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation au projet
  2. Ajoutez ce qui suit dans Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Voici l' explication complète des curieux ...

HTH

Alexandre Christov
la source
1
Cela n'a pas fonctionné pour moi pour une raison quelconque. Je suis sur Mac si cela fait une différence.
Nakul Tiruviluamala
@Nakul Quelle est la version principale de .net que vous utilisez?
Alexander Christov
Lorsque j'ai utilisé cette commande: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/, j'ai apparemment obtenu deux réponses: 2.1.13 et 3.0.0
Nakul Tiruviluamala
7
Cela a très bien fonctionné pour moi sur Mac et ASP.NET Core 3.1.
user3071284
4
Thx pour cet indice; travaillé pour moi sur .Net Core 3.1.2
jawa
50

Je viens de créer un nouveau projet en utilisant le dernier modèle ASP.NET MVC Core 3.1 et j'ai modifié ce qui suit pour activer la recompilation d'exécution pour le débogage:

Package NuGet de référence - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (services IServiceCollection) WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

MAINTENANT:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...
Jérémie N
la source
1
C'est la meilleure réponse sans lire l'article posté par Alex, qui vaut la peine d'être lu.
Waragi
9

Vous devez simplement ajouter ceci:

services.AddControllersWithViews();

à la méthode ConfigureService .

Sachez que le code ci-dessous n'est pas disponible dans ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();
Alireza Abdollahnejad
la source
6
Vous devez installer le package nuget pour le faire fonctionner Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta
4

Ci-dessous m'a aidé lorsque les vues étaient dans un projet séparé.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}
smoq
la source
C'est la seule réponse qui a fonctionné pour moi lorsque je travaille avec les bibliothèques de classes Razor. À votre santé!
Sipke Schoorstra le
3

En utilisant l'application en cours d'exécution .net core 2.2 avec la commande, dotnet watch runle projet est redémarré après chaque modification

tramada
la source
1

J'ai pu résoudre ce problème dans Rider en ajoutant la ASPNETCORE_ENVIRONMENT=Developmentvariable d'environnement.

user1613512
la source
0

Il existe deux façons de résoudre ce problème:

1 . Vérifiez les autorisations du dossier dans lequel votre fichier .sln est présent.Il peut y avoir un problème avec les autorisations d'accès aux fichiers, car Visual Studio peut ne pas accéder aux fichiers lorsque le serveur express IIS est en cours d'exécution, afin de refléter les nouvelles modifications .cshtml chaque fois que vous devez redémarrez le serveur, je suggère donc de modifier les autorisations d'accès au dossier en:

Faites un clic droit sur dossier-> propriétés-> sécurité-> cliquez sur le bouton d'édition -> cochez toutes les options-> enregistrer .

Redémarrez Visual Studio pour voir les modifications.

Si cela ne fonctionne pas, utilisez l'option 2.

2 .Dans votre projet dans startup.cs fichier ajouter cette ligne ci - dessous ConfigureServices () dans la méthode:

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

Omkar Nevase
la source