Razor kompilace souboru v ASP.NET Core

Razor soubory s příponou .cshtml se kompilují v době sestavení i publikování pomocí Razor sady SDK. Kompilace modulu runtime může být volitelně povolena konfigurací projektu.

Poznámka

Kompilace za běhu:

Razor Kompilace

Sada SDK ve výchozím nastavení Razor povoluje kompilaci Razor souborů v době sestavení a publikování. Pokud je tato možnost povolená, kompilace za běhu doplňuje kompilaci sestavení a umožňuje Razor aktualizaci souborů, pokud jsou upravovány, když je aplikace spuštěná.

Aktualizace Razor zobrazení a Razor stránek během vývoje v době, kdy je aplikace spuštěná, se podporuje také pomocí rozhraní .NET Opětovné načítání za provozu.

Poznámka

Pokud je tato možnost povolená, kompilace modulu runtime zakáže rozhraní .NET Opětovné načítání za provozu. Při vývoji doporučujeme místo kompilace za běhu používat Opětovné načítání za provozuRazor.

Povolení kompilace modulu runtime pro všechna prostředí

Povolení kompilace modulu runtime pro všechna prostředí:

  1. Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation

  2. VoláníAddRazorRuntimeCompilation:Program.cs

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

Podmíněné povolení kompilace modulu runtime

Kompilaci modulu runtime je možné povolit podmíněně, což zajišťuje, že publikovaný výstup:

  • Používá zkompilovaná zobrazení.
  • Nepovoluje sledovací proces souborů v produkčním prostředí.

Povolení kompilace modulu runtime pouze pro vývojové prostředí:

  1. Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation

  2. Volání AddRazorRuntimeCompilation , Program.cs když je aktuální prostředí nastavené na Vývoj:

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

Kompilaci modulu runtime lze také povolit pomocí hostujícího spouštěcího sestavení. Povolení kompilace modulu runtime ve vývojovém prostředí pro konkrétní spouštěcí profily:

  1. Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
  2. Upravte oddíl profilu environmentVariables spuštění v launchSettings.json:
    • Ověřte, že ASPNETCORE_ENVIRONMENT je nastavená hodnota "Development".

    • Nastavte ASPNETCORE_HOSTINGSTARTUPASSEMBLIES na hodnotu "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation". Následující příklad launchSettings.json umožňuje kompilaci modulu runtime pro ViewCompilationSample profily spuštění a IIS Express profily spuštění:

      {
        "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"
            }
          }
        }
      }
      

S tímto přístupem nejsou potřeba žádné změny kódu v Program.cs. Za běhu ASP.NET Core vyhledá atribut HostingStartup na úrovni sestavení v Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationsouboru . Atribut HostingStartup určuje spouštěcí kód aplikace, který se má spustit a který spouštěcí kód umožňuje kompilaci modulu runtime.

Povolení kompilace modulu runtime pro knihovnu Razor tříd

Představte si scénář, ve kterém projekt Pages odkazuje na knihovnu RazorRazor tříd (RCL) s názvem MyClassLib. Seznam RCL obsahuje _Layout.cshtml soubor využívaný projekty MVC a Razor Pages. Chcete-li povolit kompilaci modulu runtime pro _Layout.cshtml soubor v tomto seznamu RCL, proveďte v projektu Pages následující změny Razor :

  1. Povolte kompilaci za běhu podle pokynů v podmíněné kompilaci modulu runtime.

  2. Konfigurovat MvcRazorRuntimeCompilationOptions v 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));
    });
    

    Předchozí kód vytvoří absolutní cestu k seznamu RCL MyClassLib . Rozhraní API PhysicalFileProvider slouží k vyhledání adresářů a souborů v této absolutní cestě. PhysicalFileProvider Nakonec se instance přidá do kolekce zprostředkovatelů souborů, která umožňuje přístup k souborům seznamu RCL.cshtml.

Další prostředky

Razor soubory s příponou .cshtml se kompilují v době sestavení i publikování pomocí Razor sady SDK. Kompilace modulu runtime může být volitelně povolena konfigurací projektu.

Razor Kompilace

Sada SDK ve výchozím nastavení Razor povoluje kompilaci Razor souborů v době sestavení a publikování. Pokud je tato možnost povolená, kompilace za běhu doplňuje kompilaci sestavení a umožňuje Razor aktualizaci souborů, pokud jsou upravovány.

Povolení kompilace za běhu při vytváření projektu

Šablony Razor projektů Pages a MVC obsahují možnost povolit kompilaci modulu runtime při vytváření projektu. Tato možnost se podporuje v ASP.NET Core 3.1 a novějších verzích.

V dialogovém okně Vytvořit novou webovou aplikaci ASP.NET Core:

  1. Vyberte šablonu projektu webová aplikace nebo webová aplikace (Model-View-Controller ).
  2. Zaškrtněte políčko Povolit Razor kompilaci modulu runtime.

Povolení kompilace modulu runtime v existujícím projektu

Povolení kompilace modulu runtime pro všechna prostředí v existujícím projektu:

  1. Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation

  2. Aktualizujte metodu projektu Startup.ConfigureServices tak, aby zahrnovala volání AddRazorRuntimeCompilation. Příklad:

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

Podmíněné povolení kompilace modulu runtime v existujícím projektu

Kompilaci modulu runtime je možné povolit tak, aby byla dostupná pouze pro místní vývoj. Podmíněným povolením tímto způsobem zajistíte, že publikovaný výstup:

  • Používá zkompilovaná zobrazení.
  • Nepovoluje sledovací proces souborů v produkčním prostředí.

Povolení kompilace modulu runtime pouze ve vývojovém prostředí:

  1. Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
  2. Upravte oddíl profilu environmentVariables spuštění v launchSettings.json:
    • Ověřte ASPNETCORE_ENVIRONMENT , že je nastavená hodnota "Development".
    • Nastavte ASPNETCORE_HOSTINGSTARTUPASSEMBLIES na hodnotu "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

V následujícím příkladu je kompilace modulu runtime povolena ve vývojovém prostředí pro IIS Express profily a RazorPagesApp spouštěcí profily:

{
    "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"
        }
      }
    }
  }

Ve třídě projektu Startup nejsou potřeba žádné změny kódu. Za běhu ASP.NET Core vyhledá atribut HostingStartup na úrovni sestavení v Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationsouboru . Atribut HostingStartup určuje spouštěcí kód aplikace, který se má spustit. Tento spouštěcí kód umožňuje kompilaci modulu runtime.

Povolení kompilace modulu runtime pro knihovnu Razor tříd

Představte si scénář, ve kterém projekt Pages odkazuje na knihovnu RazorRazor tříd (RCL) s názvem MyClassLib. Seznam RCL obsahuje _Layout.cshtml soubor, který spotřebovávají všechny projekty MVC a Razor Pages vašeho týmu. Chcete povolit kompilaci modulu runtime pro _Layout.cshtml soubor v daném seznamu RCL. V projektu Pages proveďte následující změny Razor :

  1. Povolte kompilaci modulu runtime podle pokynů v tématu Podmíněně povolte kompilaci modulu runtime v existujícím projektu.

  2. Konfigurace možností kompilace modulu runtime v 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));
        });
    }
    

    V předchozím kódu je vytvořena absolutní cesta k myClassLib RCL. Rozhraní API PhysicalFileProvider slouží k vyhledání adresářů a souborů v této absolutní cestě. PhysicalFileProvider Nakonec se instance přidá do kolekce zprostředkovatelů souborů, která umožňuje přístup k souborům seznamu RCL.cshtml.

Další prostředky