RazorDateikompilierung in ASP.NET Core

Razor Dateien mit einer .cshtml Erweiterung werden sowohl zur Build- als auch zur Veröffentlichungszeit mithilfe des Razor SDK kompiliert. Die Laufzeitkompilierung kann optional durch Konfigurieren des Projekts aktiviert werden.

Hinweis

Die Laufzeitkompilierung wird für Razor Komponenten von Blazor Apps nicht unterstützt.

Hinweis

Globale Using-Anweisungen werden für die Laufzeitkompilierung nicht unterstützt.

Razor Kompilierung

Die Erstellungszeit- und Veröffentlichungszeitkompilierung von Razor Dateien ist standardmäßig vom Razor SDK aktiviert. Wenn sie aktiviert ist, ergänzt die Laufzeitkompilierung die Buildzeitkompilierung, sodass Razor Dateien aktualisiert werden können, wenn sie bearbeitet werden.

Neben der Erstellungszeitkompilierung wird das Aktualisieren Razor von Ansichten und Razor Seiten mithilfe von .NET Hot Reload Unterstützung für ASP.NET Core unterstützt.

Hinweis

Wenn diese Option aktiviert ist, deaktiviert die Laufzeitkompilierung derzeit .NET-Hot Reload. Die Laufzeitkompilierung mit Hot Reload ist für ein zukünftiges Release geplant.

Aktivieren der Laufzeitkompilierung für alle Umgebungen

So aktivieren Sie die Laufzeitkompilierung für alle Umgebungen:

  1. Installieren Sie Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.

  2. Rufen Sie AddRazorRuntimeCompilation ein Program.cs:

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

Bedingtes Aktivieren der Laufzeitkompilierung

Die Laufzeitkompilierung kann bedingt aktiviert werden, wodurch sichergestellt wird, dass die veröffentlichte Ausgabe Folgendes enthält:

  • Es werden kompilierte Ansichten verwendet.
  • Dateiüberwachungselemente in der Produktionsumgebung werden nicht aktiviert.

So aktivieren Sie die Laufzeitkompilierung nur für die Entwicklungsumgebung:

  1. Installieren Sie Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.

  2. Rufen Sie AddRazorRuntimeCompilation ein, Program.cs wenn die aktuelle Umgebung auf Entwicklung festgelegt ist:

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

Die Laufzeitkompilierung kann auch mit einer Hoststartassembly aktiviert werden. So aktivieren Sie die Laufzeitkompilierung in der Entwicklungsumgebung für bestimmte Startprofile:

  1. Installieren Sie Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
  2. Ändern Sie den Abschnitt des environmentVariables Startprofils in launchSettings.json:
    • Überprüfen Sie, ob ASPNETCORE_ENVIRONMENT auf "Development" festgelegt ist.

    • Legen Sie ASPNETCORE_HOSTINGSTARTUPASSEMBLIES auf "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" fest. So wird beispielsweise die launchSettings.json Laufzeitkompilierung für die Profile und IIS Express das ViewCompilationSample Startprofil aktiviert:

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

Bei diesem Ansatz sind keine Codeänderungen in Program.cserforderlich. Zur Laufzeit sucht ASP.NET Core in nach einem HostingStartup-Attribut aufMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationAssemblyebene. Das HostingStartup Attribut gibt den auszuführenden App-Startcode an, und dieser Startcode aktiviert die Laufzeitkompilierung.

Aktivieren der Laufzeitkompilierung für eine Razor Klassenbibliothek

Betrachten Sie ein Szenario, in dem ein Razor Pages-Projekt auf eine Razor Klassenbibliothek (RCL) mit dem Namen MyClassLib verweist. Die RCL enthält eine _Layout.cshtml Datei, die von MVC- und Razor Pages-Projekten verwendet wird. Um die Laufzeitkompilierung für die _Layout.cshtml Datei in dieser RCL zu aktivieren, nehmen Sie die folgenden Änderungen im Razor Projekt Pages vor:

  1. Aktivieren Sie die Laufzeitkompilierung mit den Anweisungen unter Aktivieren der Laufzeitkompilierung bedingt.

  2. Konfigurieren Sie 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));
    });
    

    Der vorherige Code erstellt einen absoluten Pfad zur MyClassLib-RCL . Die PhysicalFileProvider-API wird verwendet, um Verzeichnisse und Dateien in diesem absoluten Pfad zu suchen. Schließlich wird die PhysicalFileProvider -Instanz einer Dateianbietersammlung hinzugefügt, die den Zugriff auf die Dateien der .cshtml RCL ermöglicht.

Zusätzliche Ressourcen

Razor Dateien mit einer .cshtml Erweiterung werden sowohl zur Build- als auch zur Veröffentlichungszeit mithilfe des Razor SDK kompiliert. Die Laufzeitkompilierung kann optional aktiviert werden, indem Sie Ihr Projekt konfigurieren.

Razor Kompilierung

Die Erstellungszeit- und Veröffentlichungszeitkompilierung von Razor Dateien ist standardmäßig vom Razor SDK aktiviert. Wenn sie aktiviert ist, ergänzt die Laufzeitkompilierung die Buildzeitkompilierung, sodass Razor Dateien aktualisiert werden können, wenn sie bearbeitet werden.

Aktivieren der Laufzeitkompilierung bei der Projekterstellung

Die Razor Projektvorlagen Pages und MVC enthalten eine Option zum Aktivieren der Laufzeitkompilierung beim Erstellen des Projekts. Diese Option wird in ASP.NET Core Version 3.1 und höher unterstützt.

Im Dialogfeld Neue ASP.NET Core Webanwendung erstellen:

  1. Wählen Sie entweder die Webanwendung oder die Projektvorlage Webanwendung (Model-View-Controller) aus.
  2. Aktivieren Sie das Kontrollkästchen Laufzeitkompilierung aktivierenRazor.

Aktivieren der Laufzeitkompilierung in einem vorhandenen Projekt

So aktivieren Sie die Laufzeitkompilierung für alle Umgebungen in einem vorhandenen Projekt:

  1. Installieren Sie Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.

  2. Aktualisieren Sie die Startup.ConfigureServices-Methode des Projekts so, dass diese einen Aufruf von AddRazorRuntimeCompilation enthält. Beispiel:

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

Bedingtes Aktivieren der Laufzeitkompilierung in einem vorhandenen Projekt

Die Laufzeitkompilierung kann so aktiviert werden, dass sie nur für die lokale Entwicklung verfügbar ist. Eine bedingte Aktivierung auf diese Weise stellt für die veröffentlichte Ausgabe Folgendes sicher:

  • Es werden kompilierte Ansichten verwendet.
  • Dateiüberwachungselemente in der Produktionsumgebung werden nicht aktiviert.

So aktivieren Sie die Laufzeitkompilierung nur in der Entwicklungsumgebung:

  1. Installieren Sie Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
  2. Ändern Sie den Abschnitt "Startprofil environmentVariables " in launchSettings.json:
    • Überprüfen Sie, ob ASPNETCORE_ENVIRONMENT auf "Development"festgelegt ist.
    • Legen Sie ASPNETCORE_HOSTINGSTARTUPASSEMBLIES auf "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" fest.

Im folgenden Beispiel wird die Laufzeitkompilierung in der Entwicklungsumgebung für die Profile und RazorPagesApp das IIS Express Startprofil aktiviert:

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

In der Klasse des Startup Projekts sind keine Codeänderungen erforderlich. Zur Laufzeit sucht ASP.NET Core in nach einem HostingStartup-Attribut aufMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationAssemblyebene. Das HostingStartup Attribut gibt den auszuführenden App-Startcode an. Dieser Startcode ermöglicht die Laufzeitkompilierung.

Aktivieren der Laufzeitkompilierung für eine Razor Klassenbibliothek

Betrachten Sie ein Szenario, in dem ein Razor Pages-Projekt auf eine Razor Klassenbibliothek (RCL) mit dem Namen MyClassLib verweist. Die RCL enthält eine _Layout.cshtml Datei, die alle MVC- und Razor Pages-Projekte Ihres Teams nutzen. Sie möchten die Laufzeitkompilierung für die Datei in dieser _Layout.cshtml RCL aktivieren. Nehmen Sie die folgenden Änderungen im Projekt Pages vor Razor :

  1. Aktivieren Sie die Laufzeitkompilierung mit den Anweisungen unter Bedingt aktivieren der Laufzeitkompilierung in einem vorhandenen Projekt.

  2. Konfigurieren Sie die Optionen für die Runtimekompilierung 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));
        });
    }
    

    Im vorherigen Code wird ein absoluter Pfad zur MyClassLib-RCL erstellt. Die PhysicalFileProvider-API wird verwendet, um Verzeichnisse und Dateien in diesem absoluten Pfad zu suchen. Schließlich wird die PhysicalFileProvider -Instanz einer Dateianbietersammlung hinzugefügt, die den Zugriff auf die Dateien der .cshtml RCL ermöglicht.

Zusätzliche Ressourcen