Razor具有 .cshtml 扩展名的文件使用 SDK 在生成和发布时 Razor 进行编译。 可以选择通过配置项目来启用运行时编译。
Razor 编译
默认情况下,SDK 会启用文件的生成 Razor 时和发布时 Razor 编译。 启用后,运行时编译是对生成时编译的补充,允许文件在编辑 Razor 后进行更新。
创建项目时启用运行时编译
RazorPages 和 MVC 项目模板包含一个选项,用于创建项目时启用运行时编译。 Core 3.1 ASP.NET 支持此选项。
在" 创建新的 ASP.NET Core Web 应用程序" 对话框中:
选择 "Web 应用程序"或 "Web 应用程序 (模型-视图-控制器) 模板。
选中" 启用 Razor 运行时编译" 复选框。
使用 -rrc 或 --razor-runtime-compilation 模板选项。 例如,以下命令创建启用了 Razor 运行时编译的新 Pages 项目:
dotnet new webapp --razor-runtime-compilation
在现有的项目中启用运行时编译
为现有项目的所有环境启用运行时编译:
更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用。 例如:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddRazorRuntimeCompilation();
// code omitted for brevity
}
有条件地启用现有项目中的运行时编译
启用运行时编译时可使其仅用于本地开发。 以这种方式有条件地启用可确保已发布的输出:
使用编译视图。
不会在生产环境中启用文件观察程序。
仅在开发环境中启用运行时编译:
修改 environmentVariables launchSettings.js上 的启动配置文件部分:
验证 ASPNETCORE_ENVIRONMENT 是否设置为 "Development" 。
将 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 设置为 "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"。
在下面的示例中,在 IIS Express 和启动配置文件的开发环境中启用了运行时编译 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"
}
}
}
}
项目的类中不需要更改代码 Startup 。 在运行时,ASP.NET Core 在中搜索 程序集级别的 HostingStartup 特性 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 。 HostingStartup特性指定要执行的应用程序启动代码。 该启动代码启用运行时编译。
为类库启用运行时编译 Razor
请考虑以下方案 Razor :页面项目引用类库 (名为 MYCLASSLIB 的 Razor RCL) 。 RCL 包含一个 _Layout 的 cshtml 文件,其中的所有团队 MVC 和 Razor 页面项目都使用。 需要为 RCL 中的 _Layout cshtml 文件启用运行时编译。 在页面项目中进行以下更改 Razor :
配置中的运行时编译选项 Startup.ConfigureServices :
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.Configure(options =>
{
var libraryPath = Path.GetFullPath(
Path.Combine(HostEnvironment.ContentRootPath, "..", "MyClassLib"));
options.FileProviders.Add(new PhysicalFileProvider(libraryPath));
});
}
在前面的代码中,构造 MyClassLib RCL 的绝对路径。 PHYSICALFILEPROVIDER API用于查找该绝对路径中的目录和文件。 最后,将 PhysicalFileProvider 实例添加到 file 提供程序集合,该集合允许访问 RCL 的文件 。
其他资源