Delen via


Razor bestandscompilatie in ASP.NET Core

Razor bestanden met een .cshtml extensie worden gecompileerd op zowel build- als publicatietijd met behulp van de Razor SDK. Runtimecompilatie kan eventueel worden ingeschakeld door het project te configureren.

Opmerking

Runtime-compilatie

Razor verzamelwerk

Compilatietijd en publicatietijd van Razor bestanden is standaard ingeschakeld door de Razor SDK. Wanneer deze functie is ingeschakeld, vormt runtimecompilatie een aanvulling op de compilatie van de build, zodat Razor bestanden kunnen worden bijgewerkt als ze worden bewerkt terwijl de app wordt uitgevoerd.

Het bijwerken van Razor weergaven en Razor pagina's tijdens de ontwikkeling terwijl de app wordt uitgevoerd, wordt ook ondersteund met .NET Hot Reload.

Opmerking

Als runtimecompilatie is ingeschakeld, wordt .NET Hot Reload uitgeschakeld. U wordt aangeraden Hot Reload te gebruiken in plaats van Razor runtimecompilatie tijdens de ontwikkeling.

Runtimecompilatie inschakelen voor alle omgevingen

Runtimecompilatie inschakelen voor alle omgevingen:

  1. Installeer de Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-pakket.

  2. Bel AddRazorRuntimeCompilation in Program.cs:

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

Runtimecompilatie voorwaardelijk inschakelen

Runtimecompilatie kan voorwaardelijk worden ingeschakeld, wat ervoor zorgt dat de gepubliceerde uitvoer:

  • Maakt gebruik van gecompileerde weergaven.
  • Schakelt bestands-watchers niet in in de productieomgeving.

Runtimecompilatie alleen inschakelen voor de ontwikkelomgeving:

  1. Installeer de Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-pakket.

  2. Wanneer de huidige omgeving is ingesteld op Ontwikkeling: bel AddRazorRuntimeCompilation in Program.cs.

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

Runtime-compilatie kan ook worden ingeschakeld met een hosting-opstartassembly. Runtimecompilatie inschakelen in de ontwikkelomgeving voor specifieke startprofielen:

  1. Installeer de Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-pakket.
  2. Wijzig de environmentVariables sectie van het startprofiel in launchSettings.json:
    • Controleer of ASPNETCORE_ENVIRONMENT is ingesteld op "Development".

    • Stel ASPNETCORE_HOSTINGSTARTUPASSEMBLIES in op "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation". Met het volgende launchSettings.json kunt u bijvoorbeeld runtime-compilatie inschakelen voor de ViewCompilationSample- en IIS Express-startprofielen:

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

Met deze methode zijn er geen codewijzigingen nodig in Program.cs. Tijdens runtime zoekt ASP.NET Core naar een hostingstartup-kenmerk op assemblyniveau in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Het HostingStartup kenmerk geeft de opstartcode van de app op die moet worden uitgevoerd en die opstartcode maakt runtimecompilatie mogelijk.

Runtimecompilatie inschakelen voor een Razor klassebibliotheek

Overweeg een scenario waarin een Razor Pages-project verwijst naar een Razor klassebibliotheek (RCL) met de naam MyClassLib. De RCL bevat een _Layout.cshtml bestand dat wordt gebruikt door MVC- en Razor Pages-projecten. Als u runtimecompilatie wilt inschakelen voor het _Layout.cshtml bestand in die RCL, moet u de volgende wijzigingen aanbrengen in het Razor project Pages:

  1. Schakel runtimecompilatie in met de instructies op Runtime-compilatie voorwaardelijk inschakelen.

  2. Configureer MvcRazorRuntimeCompilationOptions in 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));
    });
    

    Met de voorgaande code wordt een absoluut pad naar de MyClassLib RCL gebouwd. De PhysicalFileProvider-API wordt gebruikt om mappen en bestanden op dat absolute pad te vinden. Ten slotte wordt de PhysicalFileProvider instantie toegevoegd aan een verzameling bestandsaanbieders, die toegang biedt tot de RCL's .cshtml bestanden.

Aanvullende bronnen

Razor bestanden met een .cshtml extensie worden gecompileerd op zowel build- als publicatietijd met behulp van de Razor SDK. Runtimecompilatie kan eventueel worden ingeschakeld door uw project te configureren.

Razor verzamelwerk

Compilatietijd en publicatietijd van Razor bestanden is standaard ingeschakeld door de Razor SDK. Wanneer deze functie is ingeschakeld, vormt runtimecompilatie een aanvulling op de compilatietijd van de build, zodat Razor bestanden kunnen worden bijgewerkt als ze worden bewerkt.

Runtimecompilatie inschakelen bij het maken van een project

De Razor pagina's en MVC-projectsjablonen bevatten een optie om runtimecompilatie in te schakelen wanneer het project wordt gemaakt. Deze optie wordt ondersteund in ASP.NET Core 3.1 of hoger.

In het dialoogvenster Een nieuwe ASP.NET Core-webtoepassing maken :

  1. Selecteer ofwel de webapplicatie of de webapplicatie (Model-View-Controller) projectsjabloon.
  2. Selecteer het selectievakje Runtimecompilatie inschakelen Razor.

Runtimecompilatie inschakelen in een bestaand project

Runtimecompilatie inschakelen voor alle omgevingen in een bestaand project:

  1. Installeer de Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-pakket.

  2. Werk de methode van Startup.ConfigureServices het project bij om een aanroep naar toe te AddRazorRuntimeCompilationvoegen. Voorbeeld:

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

Runtimecompilatie voorwaardelijk inschakelen in een bestaand project

Runtimecompilatie kan zodanig worden ingeschakeld dat deze alleen beschikbaar is voor lokale ontwikkeling. Voorwaardelijk inschakelen op deze manier zorgt ervoor dat de gepubliceerde uitvoer:

  • Maakt gebruik van gecompileerde weergaven.
  • Schakelt bestands-watchers niet in in de productieomgeving.

Runtimecompilatie alleen inschakelen in de ontwikkelomgeving:

  1. Installeer de Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-pakket.
  2. Wijzig de sectie Startprofiel environmentVariables in launchSettings.json:
    • Controleer of ASPNETCORE_ENVIRONMENT is ingesteld op "Development".
    • Stel ASPNETCORE_HOSTINGSTARTUPASSEMBLIES in op "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

In het volgende voorbeeld is runtimecompilatie ingeschakeld in de Development-omgeving voor de IIS Express en RazorPagesApp startprofielen.

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

Er zijn geen codewijzigingen nodig in de klasse van Startup het project. Tijdens runtime zoekt ASP.NET Core naar een hostingstartup-kenmerk op assemblyniveau in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Het HostingStartup kenmerk geeft de opstartcode van de app op die moet worden uitgevoerd. Deze opstartcode maakt runtimecompilatie mogelijk.

Runtimecompilatie inschakelen voor een Razor klassebibliotheek

Overweeg een scenario waarin een Razor Pages-project verwijst naar een Razor klassebibliotheek (RCL) met de naam MyClassLib. De RCL bevat een _Layout.cshtml bestand dat alle MVC- en Razor Pages-projecten van uw team verbruiken. U wilt runtimecompilatie inschakelen voor het _Layout.cshtml bestand in die RCL. Breng de volgende wijzigingen aan in het Razor project Pages:

  1. Runtimecompilatie inschakelen met de instructies op Voorwaardelijk runtimecompilatie inschakelen in een bestaand project.

  2. Configureer de compilatieopties voor runtime in 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));
        });
    }
    

    In de voorgaande code wordt een absoluut pad naar de MyClassLib RCL gemaakt. De PhysicalFileProvider-API wordt gebruikt om mappen en bestanden op dat absolute pad te vinden. Ten slotte wordt de PhysicalFileProvider instantie toegevoegd aan een verzameling bestandsaanbieders, die toegang biedt tot de RCL's .cshtml bestanden.

Aanvullende bronnen