RazorDateikompilierung in ASP.NET Core

Razor -Dateien mit einer .cshtml Erweiterung werden zum Zeitpunkt der Erstellung und Veröffentlichung mit dem Razor SDK kompiliert. Die Laufzeitkompilierung kann optional durch Konfigurieren des Projekts aktiviert werden.

Razor Kompilierung

Die Kompilierung von Razor Dateien zur Buildzeit und zur Veröffentlichungszeit ist vom Razor SDK standardmäßig aktiviert. Wenn diese Option aktiviert ist, ergänzt die Laufzeitkompilierung die Kompilierung zur Buildzeit, sodass Razor Dateien aktualisiert werden können, wenn sie bearbeitet werden.

Neben der Kompilierung zur Buildzeit wird das Aktualisieren von Razor Ansichten und Razor Pages mithilfe von .NET Hot Reload Unterstützung für ASP.NET Core unterstützt.

Hinweis

Wenn diese Option aktiviert ist, deaktiviert die Laufzeitkompilierung derzeit die .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 in Program.csauf:

    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:

  • 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 in Program.cs auf, 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 Hostingstartassembly 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 Startprofils 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. Folgendes ermöglicht z. B. die launchSettings.json Laufzeitkompilierung für die - und IIS Express -ViewCompilationSampleStartprofile:

      {
        "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 in keine Codeänderungen erforderlich Program.cs. Zur Laufzeit sucht ASP.NET Core in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationnach einem HostingStartup-Attribut auf Assemblyebene. Das HostingStartup -Attribut gibt den auszuführenden App-Startcode an, und dieser Startcode ermöglicht die Laufzeitkompilierung.

Aktivieren der Laufzeitkompilierung für eine Razor Klassenbibliothek

Stellen Sie sich ein Szenario vor, 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 genutzt wird. Um die Laufzeitkompilierung für die _Layout.cshtml Datei in dieser RCL zu aktivieren, nehmen Sie die folgenden Änderungen im Pages-Projekt vor Razor :

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

  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 vorangehende Code erstellt einen absoluten Pfad zur MyClassLib-RCL . Die PhysicalFileProvider-API wird verwendet, um Verzeichnisse und Dateien unter diesem absoluten Pfad zu suchen. Schließlich wird die PhysicalFileProvider -Instanz einer Dateianbietersammlung hinzugefügt, die den Zugriff auf die Dateien der RCL .cshtml ermöglicht.

Zusätzliche Ressourcen

Razor -Dateien mit einer .cshtml Erweiterung werden zum Zeitpunkt der Erstellung und Veröffentlichung mit dem Razor SDK kompiliert. Die Laufzeitkompilierung kann optional durch Konfigurieren Ihres Projekts aktiviert werden.

Razor Kompilierung

Die Kompilierung von Razor Dateien zur Buildzeit und zur Veröffentlichungszeit ist vom Razor SDK standardmäßig aktiviert. Wenn diese Option aktiviert ist, ergänzt die Laufzeitkompilierung die Kompilierung zur Buildzeit, 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, wenn das Projekt erstellt wird. Diese Option wird in ASP.NET Core 3.1 und höher unterstützt.

Im Dialogfeld Neue ASP.NET Core Webanwendung erstellen:

  1. Wählen Sie entweder die Projektvorlage Webanwendung oder 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 ist die Laufzeitkompilierung in der Entwicklungsumgebung für die - und RazorPagesApp -IIS ExpressStartprofile 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 Projekts Startup sind keine Codeänderungen erforderlich. Zur Laufzeit sucht ASP.NET Core in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationnach einem HostingStartup-Attribut auf Assemblyebene. Das HostingStartup -Attribut gibt den auszuführenden App-Startcode an. Dieser Startcode ermöglicht die Laufzeitkompilierung.

Aktivieren der Laufzeitkompilierung für eine Razor Klassenbibliothek

Stellen Sie sich ein Szenario vor, 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 Pages-Projekt vor Razor :

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

  2. Konfigurieren Sie die Laufzeitkompilierungsoptionen 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 vorangehenden Code wird ein absoluter Pfad zur MyClassLib-RCL erstellt. Die PhysicalFileProvider-API wird verwendet, um Verzeichnisse und Dateien unter diesem absoluten Pfad zu suchen. Schließlich wird die PhysicalFileProvider -Instanz einer Dateianbietersammlung hinzugefügt, die den Zugriff auf die Dateien der RCL .cshtml ermöglicht.

Zusätzliche Ressourcen