Compilation de fichiers Razor dans ASP.NET CoreRazor file compilation in ASP.NET Core

Par Rick AndersonBy Rick Anderson

Un fichier Razor est compilé au moment de l’exécution, quand la vue MVC associée est appelée.A Razor file is compiled at runtime, when the associated MVC view is invoked. La publication de fichiers Razor au moment de la génération n’est pas prise en charge.Build-time Razor file publishing is unsupported. Vous pouvez éventuellement compiler les fichiers Razor au moment de la publication et les déployer avec l’application—en utilisant l’outil de précompilation.Razor files can optionally be compiled at publish time and deployed with the app—using the precompilation tool.

Un fichier Razor est compilé au moment de l’exécution, quand la vue MVC ou la page Razor associée est appelée.A Razor file is compiled at runtime, when the associated Razor Page or MVC view is invoked. La publication de fichiers Razor au moment de la génération n’est pas prise en charge.Build-time Razor file publishing is unsupported. Vous pouvez éventuellement compiler les fichiers Razor au moment de la publication et les déployer avec l’application—en utilisant l’outil de précompilation.Razor files can optionally be compiled at publish time and deployed with the app—using the precompilation tool.

Un fichier Razor est compilé au moment de l’exécution, quand la vue MVC ou la page Razor associée est appelée.A Razor file is compiled at runtime, when the associated Razor Page or MVC view is invoked. Les fichiers Razor sont compilés au moment de la génération et de la publication à l’aide du kit SDK Razor.Razor files are compiled at both build and publish time using the Razor SDK.

Les fichiers Razor sont compilés au moment de la génération et de la publication à l’aide du kit SDK Razor.Razor files are compiled at both build and publish time using the Razor SDK. La compilation au moment de l’exécution peut éventuellement être activée en configurant votre application.Runtime compilation may be optionally enabled by configuring your application.

Compilation RazorRazor compilation

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.Build- and publish-time compilation of Razor files is enabled by default by the Razor SDK. Quand elle est activée, la compilation au moment de 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.When enabled, runtime compilation, will complement build time compilation allowing Razor files to be updated if they are editied.

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.Build- and publish-time compilation of Razor files is enabled by default by the Razor SDK. La modification des fichiers Razor une fois que ceux-ci sont mis à jour est prise en charge au moment de la génération.Editing Razor files after they're updated is supported at build time. Par défaut, seuls les fichiers Views.dll et les fichiers autres que .cshtml compilés ou les assemblys de référence nécessaires à la compilation des fichiers Razor sont déployés avec votre application.By default, only the compiled Views.dll and no .cshtml files or references assemblies required to compile Razor files are deployed with your app.

Important

L’outil de précompilation est désormais déprécié et sera supprimé dans ASP.NET Core 3.0.The precompilation tool has been deprecated, and will be removed in ASP.NET Core 3.0. Nous vous recommandons de migrer vers le SDK Razor.We recommend migrating to Razor Sdk.

Le kit SDK Razor est actif seulement si aucune propriété spécifique à la précompilation n’est définie dans le fichier projet.The Razor SDK is effective only when no precompilation-specific properties are set in the project file. Par exemple, la définition de la propriété MvcRazorCompileOnPublish du fichier .csproj sur la valeur true désactive le kit SDK Razor.For instance, setting the .csproj file's MvcRazorCompileOnPublish property to true disables the Razor SDK.

Si votre projet cible le .NET Framework, installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.ViewCompilation :If your project targets .NET Framework, install the Microsoft.AspNetCore.Mvc.Razor.ViewCompilation NuGet package:

<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation"
                  Version="2.0.4"
                  PrivateAssets="All" />

Si votre projet cible .NET Core, aucune modification n’est nécessaire.If your project targets .NET Core, no changes are necessary.

Les modèles de projet ASP.NET Core 2.x définissent implicitement la propriété MvcRazorCompileOnPublish sur la valeur true par défaut.The ASP.NET Core 2.x project templates implicitly set the MvcRazorCompileOnPublish property to true by default. Par conséquent, cet élément peut être supprimé sans problème du fichier .csproj.Consequently, this element can be safely removed from the .csproj file.

Important

L’outil de précompilation est désormais déprécié et sera supprimé dans ASP.NET Core 3.0.The precompilation tool has been deprecated, and will be removed in ASP.NET Core 3.0. Nous vous recommandons de migrer vers le SDK Razor.We recommend migrating to Razor Sdk.

La précompilation de fichiers Razor n’est pas disponible quand vous effectuez un déploiement autonome (SCD) dans ASP.NET Core 2.0.Razor file precompilation is unavailable when performing a self-contained deployment (SCD) in ASP.NET Core 2.0.

Définissez la propriété MvcRazorCompileOnPublish sur la valeur true, puis installez le package NuGet Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Set the MvcRazorCompileOnPublish property to true, and install the Microsoft.AspNetCore.Mvc.Razor.ViewCompilation NuGet package. Le fichier .csproj suivant en est un exemple, avec en surbrillance ces paramètres :The following .csproj sample highlights these settings:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0-*" />
  </ItemGroup>
</Project>

Préparer l’application pour un déploiement dépendant de l’infrastructure avec la commande de publication .NET Core CLI.Prepare the app for a framework-dependent deployment with the .NET Core CLI publish command. Par exemple, exécutez la commande suivante à la racine du projet :For example, execute the following command at the project root:

dotnet publish -c Release

Un fichier <nom_projet>.PrecompiledViews.dll, contenant les fichiers Razor compilés, est généré lorsque la précompilation réussit.A <project_name>.PrecompiledViews.dll file, containing the compiled Razor files, is produced when precompilation succeeds. Par exemple, la capture d’écran ci-dessous illustre le contenu du fichier Index.cshtml à l’intérieur de WebApplication1.PrecompiledViews.dll:For example, the screenshot below depicts the contents of Index.cshtml within WebApplication1.PrecompiledViews.dll:

Vues Razor dans la DLL

Compilation du runtimeRuntime compilation

La compilation au moment de la génération est complétée par la compilation au moment de l’exécution des fichiers Razor.Build-time compilation is supplemented by runtime compilation of Razor files. ASP.NET Core MVC recompile les fichiers Razor quand le contenu d’un fichier .cshtml change.ASP.NET Core MVC will recompile Razor files when the contents of a .cshtml file change.

La compilation au moment de la génération est complétée par la compilation au moment de l’exécution des fichiers Razor.Build-time compilation is supplemented by runtime compilation of Razor files. RazorViewEngineOptions AllowRecompilingViewsOnFileChange obtient ou définit une valeur qui détermine si les fichiers Razor (vues Razor et Razor Pages) sont recompilés et mis à jour si les fichiers changent sur le disque.The RazorViewEngineOptions AllowRecompilingViewsOnFileChange gets or sets a value that determines if Razor files (Razor views and Razor Pages) are recompiled and updated if files change on disk.

La valeur par défaut de true pour :The default value is true for:

  • Si la version de compatibilité de l’application est définie sur Version_2_1 ou une version antérieureIf the app's compatibility version is set to Version_2_1 or earlier
  • Si la version de compatibilité de l’application est définie sur Version_2_2 ou une version ultérieure et que l’application se trouve dans l’environnement de développement IsDevelopment.If the app's compatibility version is set to set to Version_2_2 or later and the app is in the Development environment IsDevelopment. En d’autres termes, les fichiers Razor ne se recompilent pas dans un environnement non centré sur le développement, sauf si AllowRecompilingViewsOnFileChange est explicitement défini.In other words, Razor files would not recompile in non-Development environment unless AllowRecompilingViewsOnFileChange is explicitly set.

Pour des conseils et des exemples concernant la définition de la version de compatibilité de l’application, consultez Version de compatibilité pour ASP.NET Core MVC.For guidance and examples of setting the app's compatibility version, see Version de compatibilité pour ASP.NET Core MVC.

La compilation au moment de l’exécution est activée à l’aide du package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Runtime compilation is enabled using the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation package. Pour activer la compilation au moment de l’exécution, les applications doivent :To enable runtime compilation, apps must:

Pour que la compilation du runtime fonctionne après déploiement, les applications doivent modifier leurs fichiers projet en définissant PreserveCompilationReferences sur true :For runtime compilation to work when deployed, apps must modify their project files to set the PreserveCompilationReferences to true:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PreserveCompilationReferences>true</PreserveCompilationReferences>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.0.0" />
  </ItemGroup>
</Project>

Ressources supplémentairesAdditional resources