Razor Компиляция файлов в ASP.NET Core
Razor файлы с .cshtml
расширением компилируются как во время сборки, так и во время публикации Razor с помощью пакета SDK. Компиляция среды выполнения может быть включена при необходимости, настроив проект.
Примечание.
Компиляция среды выполнения:
- Не поддерживается для Razor компонентов приложений Blazor .
- Не поддерживает глобальные директивы using.
- Не поддерживает неявные директивы using.
- Отключает Горячая перезагрузка .NET.
- Рекомендуется для разработки, а не для рабочей среды.
Razor компиляция
Компиляция файлов во время сборки Razor и публикации включена по умолчанию пакетом Razor SDK. При включении компиляция среды выполнения дополняет компиляцию во время сборки, позволяя Razor обновлять файлы, если они редактируются во время работы приложения.
Обновление Razor представлений и Razor страниц во время разработки во время работы приложения также поддерживается с помощью Горячая перезагрузка .NET.
Примечание.
При включении компиляция среды выполнения отключает Горячая перезагрузка .NET. Мы рекомендуем использовать Горячая перезагрузка вместо компиляции среды выполнения во время разработкиRazor.
Включение компиляции среды выполнения для всех сред
Чтобы включить компиляцию среды выполнения для всех сред, выполните следующие действия.
Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
Вызов AddRazorRuntimeCompilation в
Program.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
Условное включение компиляции среды выполнения
Компиляция среды выполнения может быть включена условно, что гарантирует, что опубликованные выходные данные:
- используют скомпилированные представления;
- не включают наблюдатели файлов в рабочей среде.
Чтобы включить компиляцию среды выполнения только для среды разработки, выполните следующие действия.
Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
Вызов при AddRazorRuntimeCompilation
Program.cs
установке текущей среды на разработку:var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
Компиляция среды выполнения также может быть включена с помощью сборки запуска размещения. Чтобы включить компиляцию среды выполнения в среде разработки для определенных профилей запуска:
- Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
- Измените раздел профиля
environmentVariables
запуска вlaunchSettings.json
:Убедитесь, что
ASPNETCORE_ENVIRONMENT
задано значение"Development"
.Задайте для параметра
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
значение"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
. Например, следующаяlaunchSettings.json
функция включает компиляцию среды выполнения для профилейViewCompilationSample
запуска иIIS 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" } } } }
При таком подходе изменения кода не требуются Program.cs
. Во время выполнения ASP.NET Core выполняет поиск атрибута Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
HostingStartup на уровне сборки. Атрибут HostingStartup
указывает код запуска приложения для выполнения, и этот код запуска включает компиляцию среды выполнения.
Включение компиляции среды выполнения для Razor библиотеки классов
Рассмотрим сценарий, в котором Razor проект Pages ссылается на библиотеку Razor классов (RCL) с именем MyClassLib. RCL содержит файл, используемый _Layout.cshtml
проектами MVC и Razor Pages. Чтобы включить компиляцию среды выполнения для _Layout.cshtml
файла в этом RCL, внесите следующие изменения в Razor проект Pages:
Включите компиляцию среды выполнения с инструкциями по условной компиляции среды выполнения.
Настройте MvcRazorRuntimeCompilationOptions в
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)); });
Предыдущий код создает абсолютный путь к RCL MyClassLib . API PhysicalFileProvider используется для поиска каталогов и файлов по абсолютному пути. Наконец,
PhysicalFileProvider
экземпляр добавляется в коллекцию поставщиков файлов, которая позволяет получить доступ к файлам RCL.cshtml
.
Дополнительные ресурсы
Razor файлы с .cshtml
расширением компилируются как во время сборки, так и во время публикации Razor с помощью пакета SDK. Компиляция среды выполнения может быть включена при необходимости, настроив проект.
Razor компиляция
Компиляция файлов во время сборки Razor и публикации включена по умолчанию пакетом Razor SDK. При включении компиляция среды выполнения дополняет компиляцию во время сборки, позволяя Razor обновлять файлы, если они редактируются.
Включение компиляции среды выполнения при создании проекта
Razor Шаблоны проектов Pages и MVC включают возможность включения компиляции среды выполнения при создании проекта. Этот параметр поддерживается в ASP.NET Core 3.1 и более поздних версий.
В диалоговом окне создания нового веб-приложения ASP.NET Core:
- Выберите шаблон проекта веб-приложения или веб-приложения (Model-View-Controller).
- Установите флажок "Включить Razor компиляцию среды выполнения".
Включение компиляции среды выполнения в существующем проекте
Чтобы включить компиляцию среды выполнения для всех сред в существующем проекте:
Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
обновите метод
Startup.ConfigureServices
в проекте, чтобы включить вызов AddRazorRuntimeCompilation. Например:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Условное включение компиляции среды выполнения в существующем проекте
Компиляцию в среде выполнения можно включить так, чтобы она была доступна только для локальной рабочей среды. Подобное условное включение гарантирует, что опубликованные выходные данные:
- используют скомпилированные представления;
- не включают наблюдатели файлов в рабочей среде.
Чтобы включить компиляцию среды выполнения только в среде разработки:
- Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
- Изменение раздела профиля
environmentVariables
запуска вlaunchSettings.json
:- Убедитесь
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 выполняет поиск атрибута Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
HostingStartup на уровне сборки. Атрибут HostingStartup
задает код запуска приложения для выполнения. Этот код запуска включает компиляцию среды выполнения.
Включение компиляции среды выполнения для Razor библиотеки классов
Рассмотрим сценарий, в котором Razor проект Pages ссылается на библиотеку Razor классов (RCL) с именем MyClassLib. RCL содержит _Layout.cshtml
файл, который используют все проекты MVC и Razor Pages вашей команды. Вы хотите включить компиляцию среды выполнения для _Layout.cshtml
файла в этом RCL. Внесите следующие изменения в Razor проект Pages:
Включите компиляцию среды выполнения с инструкциями по условному включению компиляции среды выполнения в существующем проекте.
Настройка параметров компиляции среды выполнения в
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)); }); }
В предыдущем коде создается абсолютный путь к RCL MyClassLib . API PhysicalFileProvider используется для поиска каталогов и файлов по абсолютному пути. Наконец,
PhysicalFileProvider
экземпляр добавляется в коллекцию поставщиков файлов, которая позволяет получить доступ к файлам RCL.cshtml
.
Дополнительные ресурсы
ASP.NET Core