- Razor页面
- 通用
- 客户端开发
- 标记帮助程序
- 高级
ASP.NET Core 中的 Razor 文件编译
调用相关的 MVC 视图时,Razor 文件在运行时进行编译。 不支持在生成时发布 Razor 文件。 可以使用预编译工具,在发布时选择编译 Razor 文件并将其与应用一起部署。
调用相关的 Razor 页和 MVC 视图时,Razor 文件在运行时进行编译。 不支持在生成时发布 Razor 文件。 可以使用预编译工具,在发布时选择编译 Razor 文件并将其与应用一起部署。
调用相关的 Razor 页和 MVC 视图时,Razor 文件在运行时进行编译。 在生成时和发布时使用 Razor SDK 编译 Razor 文件。
在生成和发布时均使用 Razor SDK 编译扩展名为 .cshtml 的 Razor 文件 。 通过配置应用程序,可以选择启用运行时编译。
Razor 编译
Razor SDK 默认启用 Razor 文件的生成时和发布时编译。 启用后,运行时编译将补充生成时编译,允许更新 Razor 文件(如果对其进行编辑)。
Razor SDK 默认启用 Razor 文件的生成时和发布时编译。 Razor 文件更新后,支持在生成时编辑这些文件。 默认情况下,只有编译 Razor 文件所需的编译的 Views.dll(而非 .cshtml)文件或引用程序集随应用一起部署 。
重要
已弃用预编译工具,并且将在 ASP.NET Core 3.0 中删除该工具。 建议迁移到 Razor Sdk。
仅当项目文件中未设置特定于预编译的属性时,Razor SDK 才有效。 例如,通过将 .csproj 文件的 MvcRazorCompileOnPublish
属性设置为 true
来禁用 Razor SDK 。
如果项目面向 .NET Framework,请安装 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation NuGet 包:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.4" PrivateAssets="All" />
如果项目面向 .NET Core,则无需进行任何更改。
默认情况下,ASP.NET Core 2.x 项目模板将 MvcRazorCompileOnPublish
属性隐式设置为 true
。 因此,可以从 .csproj 文件中安全地删除此元素 。
重要
已弃用预编译工具,并且将在 ASP.NET Core 3.0 中删除该工具。 建议迁移到 Razor Sdk。
在 ASP.NET Core 2.0 中执行独立部署 (SCD) 时,无法使用 Razor 文件预编译。
将 MvcRazorCompileOnPublish
属性设置为 true
,然后安装 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation NuGet 包。 以下 .csproj 示例突出显示了这些设置 :
<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>
使用 .NET Core CLI 发布命令,让应用做好框架依赖型部署的准备。 例如,在项目根目录中执行以下命令:
dotnet publish -c Release
预编译成功后,将生成包含已编译 Razor 文件的 <project_name>.PrecompiledViews.dll 文件。 例如,以下屏幕截图描述了 WebApplication1.PrecompiledViews.dll 中 Index.cshtml 的内容 :
运行时编译
通过 Razor 文件的运行时编译补充生成时编译。 当 .cshtml 文件的内容发生更改时,ASP.NET Core MVC 将重新编译 Razor 文件 。
通过 Razor 文件的运行时编译补充生成时编译。 RazorViewEngineOptions AllowRecompilingViewsOnFileChange 获取或设置一个值,该值确定当磁盘上的文件发生更改时是否重新编译和更新 Razor 文件(Razor 视图和 Razor Pages)。
对于以下项,默认值为 true
:
- 将应用的兼容性版本设置为 Version_2_1 或更早版本
- 如果应用的兼容性版本设置为 Version_2_2 或更高版本,并且应用位于开发环境 IsDevelopment 中。 换句话说,除非明确设置 AllowRecompilingViewsOnFileChange,否则 Razor 文件不会在非开发环境中重新编译。
有关设置应用的兼容性版本的指导和示例,请参阅 ASP.NET Core MVC 的兼容性版本。
为所有环境和配置模式启用运行时编译:
安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。
更新项目的
Startup.ConfigureServices
方法以包含对AddRazorRuntimeCompilation
的调用。 例如:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
有条件地启用运行时编译
启用运行时编译时可使其仅用于本地开发。 以这种方式有条件地启用可确保已发布的输出:
- 使用编译视图。
- 较小。
- 不会在生产环境中启用文件观察程序。
基于环境和配置模式启用运行时编译:
根据活动的
Configuration
值,有条件地引用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包:<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" Condition="'$(Configuration)' == 'Debug'" />
更新项目的
Startup.ConfigureServices
方法以包含对AddRazorRuntimeCompilation
的调用。 有条件地执行AddRazorRuntimeCompilation
,使其仅当ASPNETCORE_ENVIRONMENT
变量设置为Development
时在调试模式下运行:public IWebHostEnvironment Env { get; set; } public void ConfigureServices(IServiceCollection services) { IMvcBuilder builder = services.AddRazorPages(); #if DEBUG if (Env.IsDevelopment()) { builder.AddRazorRuntimeCompilation(); } #endif // code omitted for brevity }