Compilation de fichiers Razor dans ASP.NET Core
Les fichiers Razor avec l’extension .cshtml
sont compilés au moment de la génération et de la publication à l’aide du kit SDK Razor. La compilation à l’exécution peut éventuellement être activée en configurant le projet.
Notes
Compilation à l'exécution :
- N’est pas pris en charge pour les composants Razor des applications Blazor.
- Ne prend pas en charge les directives d’utilisation globales.
- Ne prend pas en charge les directives d’utilisation implicites.
- Désactive le rechargement à chaud .NET.
- Est recommandé pour le développement, et non pour la production.
Compilation Razor
La compilation au moment de la génération et de la publication des fichiers Razor est activée par défaut par le kit SDK Razor. Lorsqu’elle est activée, la compilation à l’exécution complète la compilation au moment de la génération, ce qui permet aux fichiers Razor d’être mis à jour s’ils sont modifiés pendant l’exécution de l’application.
La mise à jour des vues Razor et de Razor Pages lors du développement pendant l’exécution de l’application est également prise en charge à l’aide du rechargement à chaud .NET.
Notes
Lorsqu’elle est activée, la compilation à l’exécution désactive le rechargement à chaud .NET. Nous vous recommandons d’utiliser le rechargement à chaud plutôt que la compilation Razor à l’exécution pendant le développement.
Activer la compilation à l’exécution pour tous les environnements
Pour activer la compilation à l’exécution pour tous les environnements :
Installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
Appelez AddRazorRuntimeCompilation dans
Program.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
Activer la compilation à l'exécution de manière conditionnelle
La compilation à l'exécution peut être activée de manière conditionnelle, ce qui garantit que la sortie publiée :
- Utilise des vues compilées.
- N’active pas les observateurs de fichiers en production.
Pour activer la compilation à l'exécution uniquement pour l’environnement de développement :
Installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
Appelez AddRazorRuntimeCompilation dans
Program.cs
lorsque l’environnement actuel est défini sur Développement :var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
La compilation à l'exécution peut également être activée avec un assembly de démarrage d’hébergement. Pour activer la compilation à l'exécution dans l’environnement de développement pour des profils de lancement spécifiques :
- Installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
- Modifiez la section
environmentVariables
du profil de lancement danslaunchSettings.json
:Vérifiez que
ASPNETCORE_ENVIRONMENT
est défini sur"Development"
.Définissez
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
sur"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
. Par exemple, le fichierlaunchSettings.json
suivant active la compilation à l'exécution pour les profils de lancementViewCompilationSample
etIIS Express
:{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:7098", "sslPort": 44332 } }, "profiles": { "ViewCompilationSample": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "https://localhost:7173;http://localhost:5251", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" } } } }
Avec cette approche, aucune modification du code n’est nécessaire dans Program.cs
. Au moment de l’exécution, ASP.NET Core recherche un attribut HostingStartup au niveau de l’assembly dans Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
. L’attribut HostingStartup
spécifie le code de démarrage de l’application à exécuter et ce code de démarrage permet la compilation à l'exécution.
Activer la compilation à l’exécution pour une bibliothèque de classes Razor
Imaginez un scénario dans lequel un projet Razor Pages fait référence à une bibliothèque de classes (RCL) Razor nommée MyClassLib. Le RCL contient un fichier _Layout.cshtml
consommé par les projets MVC et Razor Pages. Pour activer la compilation à l'exécution pour le fichier _Layout.cshtml
dans ce RCL, apportez les modifications suivantes dans le projet Razor Pages :
Activez la compilation à l'exécution avec les instructions de Activer la compilation à l'exécution de manière conditionnelle.
Configurez MvcRazorRuntimeCompilationOptions dans
Program.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options => { var libraryPath = Path.GetFullPath( Path.Combine(builder.Environment.ContentRootPath, "..", "MyClassLib")); options.FileProviders.Add(new PhysicalFileProvider(libraryPath)); });
Le code précédent génère un chemin d’accès absolu au RCL MyClassLib. L’API PhysicalFileProvider est utilisée pour localiser les répertoires et les fichiers à ce chemin d’accès absolu. Enfin, l’instance
PhysicalFileProvider
est ajoutée à une collection de fournisseurs de fichiers, ce qui permet d’accéder aux fichiers.cshtml
du RCL.
Ressources supplémentaires
Les fichiers Razor avec l’extension .cshtml
sont compilés au moment de la génération et de la publication à l’aide du kit SDK Razor. La compilation à l’exécution peut éventuellement être activée en configurant votre projet.
Compilation Razor
La compilation au moment de la génération et de la publication des fichiers Razor est activée par défaut par le kit SDK Razor. Quand elle est activée, la compilation à l’exécution complète la compilation au moment de la génération, ce qui permet aux fichiers Razor d’être mis à jour s’ils sont modifiés.
Activer la compilation à l'exécution lors de la création du projet
Les modèles de projet Razor Pages et MVC incluent une option permettant d’activer la compilation à l'exécution lors de la création du projet. Cette option est prise en charge dans ASP.NET Core 3.1 et versions ultérieures.
Dans la boîte de dialogue Créer une application web ASP.NET Core :
- Sélectionnez le modèle de projet Application web ou Application web (Model-View-Controller).
- Cochez la case Activer la compilation à l'exécution Razor.
Activer la compilation à l'exécution dans un projet existant
Pour activer la compilation à l'exécution pour tous les environnements d’un projet existant :
Installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
Mettre à jour la méthode
Startup.ConfigureServices
du projet pour inclure un appel à AddRazorRuntimeCompilation. Par exemple :public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Activer de manière conditionnelle la compilation à l'exécution dans un projet existant
La compilation à l'exécution peut être activée de telle sorte qu’elle soit uniquement disponible pour le développement local. L’activation conditionnelle de cette manière garantit que la sortie publiée :
- Utilise des vues compilées.
- N’active pas les observateurs de fichiers en production.
Pour activer la compilation à l'exécution uniquement dans l’environnement de développement :
- Installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
- Modifiez la section
environmentVariables
du profil de lancement danslaunchSettings.json
:- Vérifiez que
ASPNETCORE_ENVIRONMENT
est défini sur"Development"
. - Définissez
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
sur"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
.
- Vérifiez que
Dans l’exemple suivant, la compilation à l'exécution est activée dans l’environnement de développement pour les profils de lancement IIS Express
et RazorPagesApp
:
{
"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"
}
}
}
}
Aucune modification du code n’est nécessaire dans la classe Startup
du projet. Au moment de l’exécution, ASP.NET Core recherche un attribut HostingStartup au niveau de l’assembly dans Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
. L’attribut HostingStartup
spécifie le code de démarrage de l’application à exécuter. Ce code de démarrage active la compilation à l'exécution.
Activer la compilation à l’exécution pour une bibliothèque de classes Razor
Imaginez un scénario dans lequel un projet Razor Pages fait référence à une bibliothèque de classes (RCL) Razor nommée MyClassLib. Le RCL contient un fichier _Layout.cshtml
que tous les projets MVC et Razor Pages de votre équipe consomment. Vous souhaitez activer la compilation à l'exécution pour le fichier _Layout.cshtml
dans ce RCL. Apportez les modifications suivantes dans le projet Razor Pages :
Activez la compilation à l'exécution avec les instructions Activer de manière conditionnelle la compilation à l'exécution dans un projet existant.
Configurez les options de compilation à l'exécution dans
Startup.ConfigureServices
:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.Configure<MvcRazorRuntimeCompilationOptions>(options => { var libraryPath = Path.GetFullPath( Path.Combine(HostEnvironment.ContentRootPath, "..", "MyClassLib")); options.FileProviders.Add(new PhysicalFileProvider(libraryPath)); }); }
Dans le code précédent, un chemin d’accès absolu au RCL MyClassLib est construit. L’API PhysicalFileProvider est utilisée pour localiser les répertoires et les fichiers à ce chemin d’accès absolu. Enfin, l’instance
PhysicalFileProvider
est ajoutée à une collection de fournisseurs de fichiers, ce qui permet d’accéder aux fichiers.cshtml
du RCL.