ASP.NET Core 中的 Razor 文件编译Razor file compilation in ASP.NET Core

调用相关的 MVC 视图时,Razor 文件在运行时进行编译。不支持在生成时发布 Razor 文件。可以使用预编译工具,在发布时选择编译 Razor 文件并将其与应用一起部署。

调用相关的 Razor 页和 MVC 视图时,Razor 文件在运行时进行编译。不支持在生成时发布 Razor 文件。可以使用预编译工具,在发布时选择编译 Razor 文件并将其与应用一起部署。

调用相关的 Razor 页和 MVC 视图时,Razor 文件在运行时进行编译。在生成时和发布时使用 Razor SDK 编译 Razor 文件。

在生成和发布时均使用 编译扩展名为 .cshtml 的 Razor 文件。通过配置应用程序,可以选择启用运行时编译。

Razor SDK 默认启用 Razor 文件的生成时和发布时编译。启用后,运行时编译将补充生成时编译,允许更新 Razor 文件(如果对其进行编辑)。

Razor SDK 默认启用 Razor 文件的生成时和发布时编译。Razor 文件更新后,支持在生成时编辑这些文件。默认情况下,只有编译 Razor 文件所需的编译的 Views.dll(而非 .cshtml)文件或引用程序集随应用一起部署。

重要

已弃用预编译工具,并且将在 ASP.NET Core 3.0 中删除该工具。建议迁移到 Razor Sdk

如果项目面向 .NET Framework,请安装 NuGet 包:

如果项目面向 .NET Core,则无需进行任何更改。

默认情况下,ASP.NET Core 2.x 项目模板将 MvcRazorCompileOnPublish 属性隐式设置为 true因此,可以从 .csproj 文件中安全地删除此元素。

重要

已弃用预编译工具,并且将在 ASP.NET Core 3.0 中删除该工具。建议迁移到 Razor Sdk

在 ASP.NET Core 2.0 中执行 时,无法使用 Razor 文件预编译。

MvcRazorCompileOnPublish 属性设置为 true,然后安装 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation NuGet 包。以下 .csproj 示例突出显示了这些设置:

  1. <Project Sdk="Microsoft.NET.Sdk.Web">
  2. <PropertyGroup>
  3. <TargetFramework>netcoreapp1.1</TargetFramework>
  4. <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
  5. </PropertyGroup>
  6. <ItemGroup>
  7. <PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
  8. <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.0" />
  9. <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.0" />
  10. <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0-*" />
  11. </Project>

使用 ,让应用做好框架依赖型部署的准备。例如,在项目根目录中执行以下命令:

通过 Razor 文件的运行时编译补充生成时编译。当 .cshtml 文件的内容发生更改时,ASP.NET Core MVC 将重新编译 Razor 文件。

通过 Razor 文件的运行时编译补充生成时编译。AllowRecompilingViewsOnFileChange 获取或设置一个值,该值确定当磁盘上的文件发生更改时是否重新编译和更新 Razor 文件(Razor 视图和 Razor Pages)。

对于以下项,默认值为 true

  • 如果应用的兼容性版本设置为 或更高版本,并且应用位于开发环境 IsDevelopment 中。换句话说,除非明确设置 ,否则 Razor 文件不会在非开发环境中重新编译。

有关设置应用的兼容性版本的指导和示例,请参阅 ASP.NET Core MVC 的兼容性版本

为所有环境和配置模式启用运行时编译:

  • 安装 NuGet 包。

  • 更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用。例如:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddRazorPages()
  4. .AddRazorRuntimeCompilation();
  5. // code omitted for brevity
  6. }

有条件地启用运行时编译Conditionally enable runtime compilation

  • 使用编译视图。
  • 较小。
  • 不会在生产环境中启用文件观察程序。

基于环境和配置模式启用运行时编译:

  • 根据活动的 Configuration 值,有条件地引用 包:
  • 更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用。有条件地执行 AddRazorRuntimeCompilation,使其仅当 变量设置为 Development时在调试模式下运行:
  1. public IWebHostEnvironment Env { get; set; }
  2. {
  3. IMvcBuilder builder = services.AddRazorPages();
  4. #if DEBUG
  5. if (Env.IsDevelopment())
  6. {
  7. builder.AddRazorRuntimeCompilation();
  8. }
  9. #endif
  10. // code omitted for brevity