Razor kompilacja plików w programie ASP.NET Core
Razor pliki z .cshtml
rozszerzeniem są kompilowane zarówno w czasie kompilacji, jak i publikowania przy użyciu zestawu Razor SDK. Kompilacja środowiska uruchomieniowego może być opcjonalnie włączona przez skonfigurowanie projektu.
Uwaga
Kompilacja środowiska uruchomieniowego:
- Nie jest obsługiwana w przypadku Razor składników Blazor aplikacji.
- Nie obsługuje globalnych dyrektyw using.
- Nie obsługuje niejawnych dyrektyw using.
- Wyłącza Przeładowywanie na gorąco .NET.
- Jest zalecany do programowania, a nie w środowisku produkcyjnym.
Razor kompilacja
Kompilacja plików w czasie kompilacji i czasu publikowania Razor jest domyślnie włączona przez zestaw Razor SDK. Po włączeniu kompilacja środowiska uruchomieniowego uzupełnia kompilację w czasie kompilacji, umożliwiając Razor aktualizowanie plików, jeśli są one edytowane podczas działania aplikacji.
Aktualizowanie Razor widoków i Razor stron podczas tworzenia aplikacji jest również obsługiwane przy użyciu platformy .NET Przeładowywanie na gorąco.
Uwaga
Po włączeniu kompilacja środowiska uruchomieniowego wyłącza Przeładowywanie na gorąco .NET. Zalecamy używanie Przeładowywanie na gorąco zamiast Razor kompilacji środowiska uruchomieniowego podczas programowania.
Włączanie kompilacji środowiska uruchomieniowego dla wszystkich środowisk
Aby włączyć kompilację środowiska uruchomieniowego dla wszystkich środowisk:
Zainstaluj plik Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation pakiet NuGet.
Wywołaj metodę AddRazorRuntimeCompilation w pliku
Program.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
Warunkowe włączanie kompilacji środowiska uruchomieniowego
Kompilacja środowiska uruchomieniowego można włączyć warunkowo, co gwarantuje, że opublikowane dane wyjściowe:
- Używa skompilowanych widoków.
- Nie włącza obserwatorów plików w środowisku produkcyjnym.
Aby włączyć kompilację środowiska uruchomieniowego tylko dla środowiska deweloperskiego:
Zainstaluj plik Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation pakiet NuGet.
Wywołaj AddRazorRuntimeCompilation metodę ,
Program.cs
gdy bieżące środowisko ma ustawioną wartość Programowanie:var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
Kompilację środowiska uruchomieniowego można również włączyć za pomocą zestawu uruchamiania hostingu. Aby włączyć kompilację środowiska uruchomieniowego w środowisku programistycznym dla określonych profilów uruchamiania:
- Zainstaluj plik Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation pakiet NuGet.
- Zmodyfikuj sekcję profilu uruchamiania
environmentVariables
w plikulaunchSettings.json
:Sprawdź, czy
ASPNETCORE_ENVIRONMENT
ustawiono wartość"Development"
.Ustaw wartość opcji
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
na"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
. Na przykład następującelaunchSettings.json
funkcje umożliwiają kompilację środowiska uruchomieniowego dla profilów uruchamianiaViewCompilationSample
iIIS Express
:{ "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" } } } }
W przypadku tego podejścia w programie Program.cs
nie są wymagane żadne zmiany kodu. W czasie wykonywania ASP.NET Core wyszukuje atrybut HostingStartup na poziomie zestawu w pliku Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
. Atrybut określa kod uruchamiania HostingStartup
aplikacji do wykonania, a kod uruchamiania umożliwia kompilację środowiska uruchomieniowego.
Włączanie kompilacji środowiska uruchomieniowego Razor dla biblioteki klas
Rozważmy scenariusz, w którym Razor projekt Pages odwołuje się do Razor biblioteki klas (RCL) o nazwie MyClassLib. Lista RCL zawiera _Layout.cshtml
plik używany przez projekty MVC i Razor Pages. Aby włączyć kompilację _Layout.cshtml
środowiska uruchomieniowego dla pliku na tej liście RCL, wprowadź następujące zmiany w projekcie Razor Pages:
Włącz kompilację środowiska uruchomieniowego z instrukcjami w temacie Włączanie kompilacji środowiska uruchomieniowego warunkowo.
Skonfiguruj MvcRazorRuntimeCompilationOptions w programie
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)); });
Powyższy kod tworzy ścieżkę bezwzględną do listy RCL myClassLib . Interfejs API PhysicalFileProvider służy do lokalizowania katalogów i plików w tej ścieżce bezwzględnej.
PhysicalFileProvider
Na koniec wystąpienie jest dodawane do kolekcji dostawców plików, która umożliwia dostęp do plików listy RCL.cshtml
.
Dodatkowe zasoby
Razor pliki z .cshtml
rozszerzeniem są kompilowane zarówno w czasie kompilacji, jak i publikowania przy użyciu zestawu Razor SDK. Kompilacja środowiska uruchomieniowego może być opcjonalnie włączona przez skonfigurowanie projektu.
Razor kompilacja
Kompilacja plików w czasie kompilacji i czasu publikowania Razor jest domyślnie włączona przez zestaw Razor SDK. Po włączeniu kompilacja środowiska uruchomieniowego uzupełnia kompilację w czasie kompilacji, umożliwiając Razor aktualizowanie plików w przypadku ich edytowania.
Włączanie kompilacji środowiska uruchomieniowego podczas tworzenia projektu
Szablony Razor projektów Pages i MVC zawierają opcję włączania kompilacji środowiska uruchomieniowego podczas tworzenia projektu. Ta opcja jest obsługiwana w programie ASP.NET Core 3.1 lub nowszym.
W oknie dialogowym Tworzenie nowej aplikacji internetowej platformy ASP.NET Core:
- Wybierz szablon projektu Aplikacja internetowa lub Aplikacja internetowa (Model-View-Controller).
- Zaznacz pole wyboru Włącz Razor kompilację środowiska uruchomieniowego.
Włączanie kompilacji środowiska uruchomieniowego w istniejącym projekcie
Aby włączyć kompilację środowiska uruchomieniowego dla wszystkich środowisk w istniejącym projekcie:
Zainstaluj plik Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation pakiet NuGet.
Zaktualizuj metodę projektu
Startup.ConfigureServices
, aby uwzględnić wywołanie metody AddRazorRuntimeCompilation. Na przykład:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Warunkowe włączanie kompilacji środowiska uruchomieniowego w istniejącym projekcie
Kompilacja środowiska uruchomieniowego może być włączona, tak aby była dostępna tylko w przypadku programowania lokalnego. Warunkowe włączenie w ten sposób gwarantuje, że opublikowane dane wyjściowe:
- Używa skompilowanych widoków.
- Nie włącza obserwatorów plików w środowisku produkcyjnym.
Aby włączyć kompilację środowiska uruchomieniowego tylko w środowisku programistycznym:
- Zainstaluj plik Microsoft.AspNetCore.Mvc.Razor. RuntimeCompilation pakiet NuGet.
- Zmodyfikuj sekcję profilu
environmentVariables
uruchamiania w plikulaunchSettings.json
:- Sprawdź, czy
ASPNETCORE_ENVIRONMENT
ustawiono wartość"Development"
. - Ustaw wartość opcji
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
na"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
.
- Sprawdź, czy
W poniższym przykładzie kompilacja środowiska uruchomieniowego jest włączona w środowisku programistycznym dla profilów uruchamiania IIS Express
i RazorPagesApp
:
{
"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"
}
}
}
}
W klasie projektu Startup
nie są wymagane żadne zmiany kodu. W czasie wykonywania ASP.NET Core wyszukuje atrybut HostingStartup na poziomie zestawu w pliku Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
. Atrybut HostingStartup
określa kod uruchamiania aplikacji do wykonania. Ten kod startowy umożliwia kompilację środowiska uruchomieniowego.
Włączanie kompilacji środowiska uruchomieniowego Razor dla biblioteki klas
Rozważmy scenariusz, w którym Razor projekt Pages odwołuje się do Razor biblioteki klas (RCL) o nazwie MyClassLib. Lista RCL zawiera _Layout.cshtml
plik, z którego korzystają wszystkie projekty MVC i Razor Pages twojego zespołu. Chcesz włączyć kompilację środowiska uruchomieniowego _Layout.cshtml
dla pliku w tej liście RCL. Wprowadź następujące zmiany w projekcie Razor Pages:
Włącz kompilację środowiska uruchomieniowego z instrukcjami w temacie Warunkowe włączanie kompilacji środowiska uruchomieniowego w istniejącym projekcie.
Skonfiguruj opcje kompilacji środowiska uruchomieniowego w programie
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)); }); }
W poprzednim kodzie jest tworzona ścieżka bezwzględna do listy RCL MyClassLib . Interfejs API PhysicalFileProvider służy do lokalizowania katalogów i plików w tej ścieżce bezwzględnej.
PhysicalFileProvider
Na koniec wystąpienie jest dodawane do kolekcji dostawców plików, która umożliwia dostęp do plików listy RCL.cshtml
.