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
Laufzeitkompilierung:
- Wird für Razor Komponenten von Blazor Apps nicht unterstützt.
- Unterstützt keine globalen Using-Anweisungen.
- Unterstützt keine impliziten Using-Anweisungen.
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:
Installieren Sie die Microsoft. AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
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:
Installieren Sie die Microsoft. AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
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:
- Installieren Sie die Microsoft. AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
- Ändern Sie den Abschnitt des
environmentVariables
Startprofils inlaunchSettings.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 dielaunchSettings.json
Laufzeitkompilierung für die Profile undIIS Express
dasViewCompilationSample
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.cs
erforderlich. Zur Laufzeit sucht ASP.NET Core in nach einem HostingStartup-Attribut aufMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Assemblyebene. 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:
Aktivieren Sie die Laufzeitkompilierung mit den Anweisungen unter Aktivieren der Laufzeitkompilierung bedingt.
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:
- Wählen Sie entweder die Webanwendung oder die Projektvorlage Webanwendung (Model-View-Controller) aus.
- 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:
Installieren Sie die Microsoft. AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
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:
- Installieren Sie die Microsoft. AspNetCore.Mvc.Razor. RuntimeCompilation NuGet-Paket.
- Ändern Sie den Abschnitt "Startprofil
environmentVariables
" inlaunchSettings.json
:- Überprüfen Sie, ob
ASPNETCORE_ENVIRONMENT
auf"Development"
festgelegt ist. - Legen Sie
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
auf"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
fest.
- Überprüfen Sie, ob
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.RuntimeCompilation
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
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 :
Aktivieren Sie die Laufzeitkompilierung mit den Anweisungen unter Bedingt aktivieren der Laufzeitkompilierung in einem vorhandenen Projekt.
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.