Поделиться через


Razor Компиляция файлов в ASP.NET Core

Razor файлы с .cshtml расширением компилируются как во время сборки, так и во время публикации Razor с помощью пакета SDK. Компиляция среды выполнения может быть включена при необходимости, настроив проект.

Примечание.

Компиляция среды выполнения:

Razor компиляция

Компиляция файлов во время сборки Razor и публикации включена по умолчанию пакетом Razor SDK. При включении компиляция среды выполнения дополняет компиляцию во время сборки, позволяя Razor обновлять файлы, если они редактируются во время работы приложения.

Обновление Razor представлений и Razor страниц во время разработки во время работы приложения также поддерживается с помощью Горячая перезагрузка .NET.

Примечание.

При включении компиляция среды выполнения отключает Горячая перезагрузка .NET. Мы рекомендуем использовать Горячая перезагрузка вместо компиляции среды выполнения во время разработкиRazor.

Включение компиляции среды выполнения для всех сред

Чтобы включить компиляцию среды выполнения для всех сред, выполните следующие действия.

  1. Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.

  2. Вызов AddRazorRuntimeCompilation в Program.cs:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddRazorPages()
        .AddRazorRuntimeCompilation();
    

Условное включение компиляции среды выполнения

Компиляция среды выполнения может быть включена условно, что гарантирует, что опубликованные выходные данные:

  • используют скомпилированные представления;
  • не включают наблюдатели файлов в рабочей среде.

Чтобы включить компиляцию среды выполнения только для среды разработки, выполните следующие действия.

  1. Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.

  2. Вызов при AddRazorRuntimeCompilation Program.cs установке текущей среды на разработку:

    var builder = WebApplication.CreateBuilder(args);
    
    var mvcBuilder = builder.Services.AddRazorPages();
    
    if (builder.Environment.IsDevelopment())
    {
        mvcBuilder.AddRazorRuntimeCompilation();
    }
    

Компиляция среды выполнения также может быть включена с помощью сборки запуска размещения. Чтобы включить компиляцию среды выполнения в среде разработки для определенных профилей запуска:

  1. Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
  2. Измените раздел профиля 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.RuntimeCompilationHostingStartup на уровне сборки. Атрибут HostingStartup указывает код запуска приложения для выполнения, и этот код запуска включает компиляцию среды выполнения.

Включение компиляции среды выполнения для Razor библиотеки классов

Рассмотрим сценарий, в котором Razor проект Pages ссылается на библиотеку Razor классов (RCL) с именем MyClassLib. RCL содержит файл, используемый _Layout.cshtml проектами MVC и Razor Pages. Чтобы включить компиляцию среды выполнения для _Layout.cshtml файла в этом RCL, внесите следующие изменения в Razor проект Pages:

  1. Включите компиляцию среды выполнения с инструкциями по условной компиляции среды выполнения.

  2. Настройте 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:

  1. Выберите шаблон проекта веб-приложения или веб-приложения (Model-View-Controller).
  2. Установите флажок "Включить Razor компиляцию среды выполнения".

Включение компиляции среды выполнения в существующем проекте

Чтобы включить компиляцию среды выполнения для всех сред в существующем проекте:

  1. Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.

  2. обновите метод Startup.ConfigureServices в проекте, чтобы включить вызов AddRazorRuntimeCompilation. Например:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages()
            .AddRazorRuntimeCompilation();
    
        // code omitted for brevity
    }
    

Условное включение компиляции среды выполнения в существующем проекте

Компиляцию в среде выполнения можно включить так, чтобы она была доступна только для локальной рабочей среды. Подобное условное включение гарантирует, что опубликованные выходные данные:

  • используют скомпилированные представления;
  • не включают наблюдатели файлов в рабочей среде.

Чтобы включить компиляцию среды выполнения только в среде разработки:

  1. Установите Microsoft.AspNetCore.Mvc.Razor. Пакет NuGet runtimeCompilation.
  2. Изменение раздела профиля 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.RuntimeCompilationHostingStartup на уровне сборки. Атрибут HostingStartup задает код запуска приложения для выполнения. Этот код запуска включает компиляцию среды выполнения.

Включение компиляции среды выполнения для Razor библиотеки классов

Рассмотрим сценарий, в котором Razor проект Pages ссылается на библиотеку Razor классов (RCL) с именем MyClassLib. RCL содержит _Layout.cshtml файл, который используют все проекты MVC и Razor Pages вашей команды. Вы хотите включить компиляцию среды выполнения для _Layout.cshtml файла в этом RCL. Внесите следующие изменения в Razor проект Pages:

  1. Включите компиляцию среды выполнения с инструкциями по условному включению компиляции среды выполнения в существующем проекте.

  2. Настройка параметров компиляции среды выполнения в 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 .

Дополнительные ресурсы