.NET Core 3.0: les vues Razor ne se recompilent pas automatiquement en cas de modification

94

Selon la documentation , les vues Razor doivent, par défaut, recompiler en cas de modification sur les environnements locaux pour ASP.NET Core 3.0.

Cependant, mon projet ne le fait pas localement. Si je change une vue et actualise lorsque je débogue localement, la modification n'est pas reflétée. Je dois arrêter la solution, réexécuter, puis voir le changement.

Je fais cela sur un modèle d'application Web ASP.NET Core par défaut sur Visual Studio 2019 avec ASP.NET Core 3.0.0 Preview 2 à l'aide de pages Razor. Une idée si j'ai besoin de modifier les paramètres pour activer cette fonctionnalité?

MISE À JOUR NOV 2019 POUR LA VERSION COMPLÈTE 3.0:

Cette question suscite encore beaucoup de vues. Quelques réponses ont été citées à ajouter

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

À votre ConfigureServices()fonction Startup.csaprès avoir ajouté le Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpackage NuGet. Dans mon cas, j'utilise uniquement Razor Pages, donc je n'appelle pas AddControllersWithViews(). Au lieu de cela, cela a fonctionné pour moi:

services.AddRazorPages().AddRazorRuntimeCompilation();
tarun713
la source
Les vues rasoir .cshtml sont recompilées. Pouvez-vous vérifier? Essayez d'ajouter un <h1> Test </h1>. Démarrez l'application, chargez la page. vous devriez voir "Test". Puis changez ceci en <h1> Foo </h1>. Vous devriez voir "Foo".
John-Luke Laue
Ça ne marche pas! Je dois arrêter et démarrer la solution. Capturé ici: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN / ... - J'ai essayé sur plusieurs machines avec le modèle Razor Pages.
tarun713
Utilisez-vous un Mac, un PC ou Linux? Cela peut également être un problème avec l'aperçu. Pouvez-vous essayer d'utiliser asp.net core 2.x?
John-Luke Laue le
PC, aperçu de Visual Studio 2019. J'ai essayé avec 2.2 et ça marche! Il y a donc quelque chose qui a changé dans la version 3.0.
tarun713
Je suis sur un .net core 3 / VS entièrement mis à jour et j'ai dû ajouter .AddRazorRuntimeCompilation();Merci!
duckwizzle

Réponses:

60

OK, il semble que ce n'est pas encore pris en charge :(

Compilation d'exécution supprimée Suite au nettoyage de l'infrastructure partagée ASP.NET Core pour ne pas dépendre de Roslyn, la prise en charge de la compilation d'exécution des pages et des vues a également été supprimée dans cette version préliminaire. Au lieu de cela, la compilation des pages et des vues est effectuée au moment de la construction. Dans une future mise à jour d'aperçu, nous fournirons des packages NuGet pour activer éventuellement la prise en charge de la compilation d'exécution dans une application.

Vous pouvez en savoir plus sur le problème ici https://github.com/aspnet/Announcements/issues/343

Les applications qui nécessitent une compilation d'exécution ou une recompilation des fichiers Razor doivent:

  • Ajoutez une référence au Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpackage. Il sera disponible dans le cadre de la version 3.0.0-preview3 .
  • Mettez à jour l'application ConfigureServicespour inclure un appel à AddMvcRazorRuntimeCompilation:
Lukáš Kmoch
la source
11
AddMvcRazorRuntimeCompilationest AddRazorRuntimeCompilationavec ASP.Net Core 3.0 Preview 4
DB Fred
56

Pour la version ASP.NET Core 3:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

Il peut également être activé sous condition uniquement pour le développement local, cité à partir du lien:

La compilation d'exécution peut être activée de telle sorte qu'elle n'est disponible que pour le développement local. L'activation conditionnelle de cette manière garantit que la sortie publiée:

Utilise des vues compilées.
Est de plus petite taille.
N'active pas les observateurs de fichiers en production.

   public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        Env = env;
    }

    public IWebHostEnvironment Env { get; set; }
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        IMvcBuilder builder = services.AddRazorPages();

#if DEBUG
            if (Env.IsDevelopment())
            {
                builder.AddRazorRuntimeCompilation();
            }
#endif
    }
Rauland
la source
Astuce sur les versions du package nuget liées à la version principale de .Net. Si vous utilisez .Net Core 3.0, vous ne pouvez pas sélectionner les versions ultérieures de ce package Nuget. Mais la version 3.0.0 de la bibliothèque Nuget fonctionne avec .Net Core 3.0. Si vous utilisez .Net Core 3.1, vous pouvez sélectionner des versions plus récentes.
Tore Aurstad le
36

Pour récupérer la compilation des vues d'exécution dans ASP.NET Core3

  1. Référence Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Appel services.AddMvc().AddRazorRuntimeCompilation()
  3. Supprimer Microsoft.VisualStudio.Web.CodeGeneration.Designs'il y a une incompatibilité de version sur le Microsoft.CodeAnalysis.Commonpackage
Dmitry Pavlov
la source
2
Juste un conseil pour les autres: lorsque vous utilisez Nuget, cochez / cochez la case "pré-version".
GeoffM
Existe-t-il un moyen d'empêcher les actifs d'être déployés en production? J'ai essayé quelques combinaisons de PrivateAssets sur PackageReference mais cela ne semble pas fonctionner.
Chet le
Dans les options de rasoir Core 2.2 a FileProviders et cela fonctionne même sans aucune recompilation. Modifiez simplement cshtml et le tour est joué. Dans le noyau 3, cette propriété est supprimée. :( github.com/aspnet/AspNetCore/issues/14572
dariol
1
+1 parce que la suppression du package Microsoft.VisualStudio.Web.CodeGeneration.Design était la sauce secrète que nulle part ailleurs ne mentionne.
tkburbidge
@tkburbidge Je viens de rencontrer ce problème avec le package. Curieusement, j'avais deux lignes qui étaient exactement les mêmes, dos à dos. J'ai supprimé les deux et j'ai pu compiler. Encore plus étrange , j'ai ensuite remis les lignes en place et j'ai toujours pu compiler.
Lynn Crumbling
26

La compilation d'exécution est activée à l'aide du Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpackage. Pour activer la compilation d'exécution, les applications doivent:

  1. Installez le Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpackage NuGet.

  2. Mettez à jour la Startup.ConfigureServicesméthode du projet pour inclure un appel à AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

kevic
la source
13

Pour récupérer la compilation Razor Views à l'exécution dans ASP.NET Core 3.1:

  1. Installez le Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpackage NuGet.
  2. Mettez à jour la Startup.ConfigureServicesméthode du projet pour inclure un appel à AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    Compilation de fichiers Razor dans ASP.NET Core 3.1

Naman Upadhyay
la source
11

Étape 1: installez le package ci-dessous à partir de NuGet Package Manager for Solution.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Étape 2: ajoutez le code ci-dessous dans le fichier ConfigureServices du fichier Startup.cs

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Enregistrez la page, puis actualisez le navigateur client.

Si vous utilisez Razor, ajoutez le code des services.AddRazorPages (). AddRazorRuntimeCompilation ();

psuneel127
la source
6

Juste une note supplémentaire - vous voudrez peut-être activer uniquement conditionnellement cette compilation d'exécution, afin que la sortie publiée:

  • Utilise des vues compilées.
  • Est de plus petite taille.
  • N'active pas les observateurs de fichiers en production.

Activer conditionnellement la compilation d'exécution

BryanCass
la source
5

Dans .NET Core 3.1, vous devez désactiver la génération du views.dllfichier.

  1. Ajoutez le code ci-dessous à votre .csprojfichier (à la racine de votre projet):

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <UserSecretsId>...</UserSecretsId>
    
        <!-- add from this line: -->
        <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
        <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
        <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
        <RazorCompileOnBuild>false</RazorCompileOnBuild>
        <!-- to this line. -->
    
    </PropertyGroup>
    
  2. Installez le package ci-dessous à partir du gestionnaire de packages NuGet pour la solution.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Ajoutez le code ci-dessous à la ConfigureServicesméthode de votre Startup.csfichier:

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Ou

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Ou

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Après cela, publiez à nouveau et exécutez-le. Ça va marcher.

Ali Rasouli
la source
0

Le moyen le plus simple de configurer Runtime Compilation pour le développement local uniquement consiste à mettre à jour les profils de lancement dans launchSettings.json. Cette méthode ne nécessite aucune modification de code pour configurer un projet qui s'exécute localement (cela n'affectera pas votre production).

Voir la documentation officielle :

  1. Installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .
  2. Modifiez la section EnvironmentVariables du profil de lancement dans launchSettings.json:
    • Vérifier ASPNETCORE_ENVIRONMENTest défini sur "Développement".
    • Défini ASPNETCORE_HOSTINGSTARTUPASSEMBLIESsur «Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation».

Exemple:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:57676",
      "sslPort": 44364
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
      }
    },
    "RazorPagesApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
      }
    }
  }
}
ciseaux
la source