Razor kompilace souboru v ASP.NET Core
Razor soubory s příponou .cshtml
se kompilují v době sestavení i publikování pomocí Razor sady SDK. Kompilace modulu runtime může být volitelně povolena konfigurací projektu.
Poznámka:
Kompilace za běhu:
- Součásti aplikací se nepodporují Razor Blazor .
- Nepodporuje globální direktivy using.
- Nepodporuje implicitní použití direktiv.
- Zakáže Opětovné načítání za provozu .NET.
- Doporučuje se pro vývoj, ne pro produkční prostředí.
Razor kompilace
Sada SDK ve výchozím nastavení Razor povoluje kompilaci Razor souborů v době sestavení a publikování. Pokud je tato možnost povolená, kompilace za běhu doplňuje kompilaci sestavení a umožňuje Razor aktualizaci souborů, pokud jsou upravovány, když je aplikace spuštěná.
Aktualizace Razor zobrazení a Razor stránek během vývoje v době, kdy je aplikace spuštěná, se podporuje také pomocí rozhraní .NET Opětovné načítání za provozu.
Poznámka:
Pokud je tato možnost povolená, kompilace modulu runtime zakáže rozhraní .NET Opětovné načítání za provozu. Při vývoji doporučujeme místo kompilace za běhu používat Opětovné načítání za provozuRazor.
Povolení kompilace modulu runtime pro všechna prostředí
Povolení kompilace modulu runtime pro všechna prostředí:
Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
VoláníAddRazorRuntimeCompilation:
Program.cs
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
Podmíněné povolení kompilace modulu runtime
Kompilaci modulu runtime je možné povolit podmíněně, což zajišťuje, že publikovaný výstup:
- Používá zkompilovaná zobrazení.
- Nepovoluje sledovací proces souborů v produkčním prostředí.
Povolení kompilace modulu runtime pouze pro vývojové prostředí:
Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
Volání AddRazorRuntimeCompilation ,
Program.cs
když je aktuální prostředí nastavené na Vývoj:var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
Kompilaci modulu runtime lze také povolit pomocí hostujícího spouštěcího sestavení. Povolení kompilace modulu runtime ve vývojovém prostředí pro konkrétní spouštěcí profily:
- Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
- Upravte oddíl profilu
environmentVariables
spuštění vlaunchSettings.json
:Ověřte, že
ASPNETCORE_ENVIRONMENT
je nastavená hodnota"Development"
.Nastavte
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
na hodnotu"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
. Následující příkladlaunchSettings.json
umožňuje kompilaci modulu runtime proViewCompilationSample
profily spuštění aIIS Express
profily spuštění:{ "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" } } } }
S tímto přístupem nejsou potřeba žádné změny kódu v Program.cs
. Za běhu ASP.NET Core vyhledá atribut HostingStartup na úrovni sestavení v Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
souboru . Atribut HostingStartup
určuje spouštěcí kód aplikace, který se má spustit a který spouštěcí kód umožňuje kompilaci modulu runtime.
Povolení kompilace modulu runtime pro knihovnu Razor tříd
Představte si scénář, ve kterém Razor projekt Pages odkazuje na knihovnu Razor tříd (RCL) s názvem MyClassLib. Seznam RCL obsahuje _Layout.cshtml
soubor využívaný projekty MVC a Razor Pages. Chcete-li povolit kompilaci modulu runtime pro _Layout.cshtml
soubor v tomto seznamu RCL, proveďte v projektu Pages následující změny Razor :
Povolte kompilaci za běhu podle pokynů v podmíněné kompilaci modulu runtime.
Konfigurovat MvcRazorRuntimeCompilationOptions v
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)); });
Předchozí kód vytvoří absolutní cestu k seznamu RCL MyClassLib . Rozhraní API PhysicalFileProvider slouží k vyhledání adresářů a souborů v této absolutní cestě.
PhysicalFileProvider
Nakonec se instance přidá do kolekce zprostředkovatelů souborů, která umožňuje přístup k souborům seznamu RCL.cshtml
.
Další materiály
Razor soubory s příponou .cshtml
se kompilují v době sestavení i publikování pomocí Razor sady SDK. Kompilace modulu runtime může být volitelně povolena konfigurací projektu.
Razor kompilace
Sada SDK ve výchozím nastavení Razor povoluje kompilaci Razor souborů v době sestavení a publikování. Pokud je tato možnost povolená, kompilace za běhu doplňuje kompilaci sestavení a umožňuje Razor aktualizaci souborů, pokud jsou upravovány.
Povolení kompilace za běhu při vytváření projektu
Šablony Razor projektů Pages a MVC obsahují možnost povolit kompilaci modulu runtime při vytváření projektu. Tato možnost se podporuje v ASP.NET Core 3.1 a novějších verzích.
V dialogovém okně Vytvořit novou webovou aplikaci ASP.NET Core:
- Vyberte šablonu projektu webová aplikace nebo webová aplikace (Model-View-Controller ).
- Zaškrtněte políčko Povolit Razor kompilaci modulu runtime.
Povolení kompilace modulu runtime v existujícím projektu
Povolení kompilace modulu runtime pro všechna prostředí v existujícím projektu:
Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
Aktualizujte metodu projektu
Startup.ConfigureServices
tak, aby zahrnovala volání AddRazorRuntimeCompilation. Příklad:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Podmíněné povolení kompilace modulu runtime v existujícím projektu
Kompilaci modulu runtime je možné povolit tak, aby byla dostupná pouze pro místní vývoj. Podmíněným povolením tímto způsobem zajistíte, že publikovaný výstup:
- Používá zkompilovaná zobrazení.
- Nepovoluje sledovací proces souborů v produkčním prostředí.
Povolení kompilace modulu runtime pouze ve vývojovém prostředí:
- Nainstalujte Microsoft.AspNetCore.Mvc.Razor. Balíček NuGet runtimeCompilation
- Upravte oddíl profilu
environmentVariables
spuštění vlaunchSettings.json
:- Ověřte
ASPNETCORE_ENVIRONMENT
, že je nastavená hodnota"Development"
. - Nastavte
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
na hodnotu"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
.
- Ověřte
V následujícím příkladu je kompilace modulu runtime povolena ve vývojovém prostředí pro IIS Express
profily a RazorPagesApp
spouštěcí profily:
{
"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"
}
}
}
}
Ve třídě projektu Startup
nejsou potřeba žádné změny kódu. Za běhu ASP.NET Core vyhledá atribut HostingStartup na úrovni sestavení v Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
souboru . Atribut HostingStartup
určuje spouštěcí kód aplikace, který se má spustit. Tento spouštěcí kód umožňuje kompilaci modulu runtime.
Povolení kompilace modulu runtime pro knihovnu Razor tříd
Představte si scénář, ve kterém Razor projekt Pages odkazuje na knihovnu Razor tříd (RCL) s názvem MyClassLib. Seznam RCL obsahuje _Layout.cshtml
soubor, který spotřebovávají všechny projekty MVC a Razor Pages vašeho týmu. Chcete povolit kompilaci modulu runtime pro _Layout.cshtml
soubor v daném seznamu RCL. V projektu Pages proveďte následující změny Razor :
Povolte kompilaci modulu runtime podle pokynů v tématu Podmíněně povolte kompilaci modulu runtime v existujícím projektu.
Konfigurace možností kompilace modulu runtime v
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)); }); }
V předchozím kódu je vytvořena absolutní cesta k myClassLib RCL. Rozhraní API PhysicalFileProvider slouží k vyhledání adresářů a souborů v této absolutní cestě.
PhysicalFileProvider
Nakonec se instance přidá do kolekce zprostředkovatelů souborů, která umožňuje přístup k souborům seznamu RCL.cshtml
.