Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Autor: Rick Anderson
Razor zobrazení, stránky, kontrolery, modely stránek, Razor komponenty, komponenty zobrazení a datové modely lze integrovat do Razor knihovny tříd (RCL). RCL lze zabalit a znovu použít. Aplikace mohou zahrnovat RCL a přepsat zobrazení a stránky, které obsahuje. Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci.
Informace o tom, jak integrovat npm a webpack do procesu sestavení pro knihovnu tříd Razor (RCL), najdete v tématu Vytvoření webových prostředků klienta pro vaši Razor knihovnu tříd.
Vytvořte knihovnu tříd obsahující Razor uživatelské rozhraní
- V sadě Visual Studio vyberte Vytvořit nový nový projekt.
- Vyberte Razor knihovnu tříd>Další.
- Pojmenujte knihovnu (například RazorClassLib), >Vytvořte. Aby nedocházelo ke kolizi názvu souboru s vygenerovanou knihovnou zobrazení, ujistěte se, že název knihovny nekončí
.Views
. - Pro zajištění toho, aby knihovna obsahovala stránky a/nebo zobrazení, vyberte podporu stránek a zobrazení. Ve výchozím nastavení se podporují jenom Razor komponenty. Vyberte Vytvořit.
Šablona Razor knihovny tříd standardně umožňuje Razor vývoj komponent. Možnost stránky a zobrazení podpory podporuje stránky a zobrazení. Další informace o podpoře RCL naleznete v tématu BlazorRazor
Přidejte Razor soubory do RCL.
Šablony ASP.NET Core předpokládají, že obsah seznamu RCL je ve Areas
složce. Viz níže rozložení stránek RCL pro vytvoření RCL, který zpřístupňuje obsah v ~/Pages
, namísto ~/Areas/Pages
.
Referenční obsah RCL
Na seznam RCL lze odkazovat pomocí:
- Balíček NuGet Viz Vytváření balíčků NuGet a dotnet přidat balíček a Vytvoření a publikování balíčku NuGet.
-
{ProjectName}.csproj
. Podívejte se na dotnet-add reference.
Předdefinování zobrazení, částečných zobrazení a stránek
Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci. Například přidání WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 a Stránka1 ve WebApp1 bude mít přednost před Stránkou1 v RCL.
V ukázkovém souboru přejmenujte WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
pro otestování priority.
Zkopírujte RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
částečné zobrazení do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
složky. Aktualizujte značkování tak, aby označovalo nové umístění. Sestavte a spusťte aplikaci, abyste ověřili, že se používá verze části aplikace.
Pokud RCL používá Razor stránky, povolte služby Pages a koncové body v hostitelské aplikaci:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Rozložení stránek RCL
Pokud chcete odkazovat na obsah seznamu RCL, jako by byl součástí složky webové aplikace Pages
, vytvořte projekt RCL s následující strukturou souborů:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Předpokládejme, že RazorUIClassLib/Pages/Shared
obsahuje dva částečné soubory: _Header.cshtml
a _Footer.cshtml
. Značky <partial>
se dají přidat do _Layout.cshtml
souboru:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Přidejte soubor do složky projektu Pages
RCL pro použití _Layout.cshtml
souboru z hostitelské webové aplikace:
@{
Layout = "_Layout";
}
Vytvoření RCL se statickými prostředky
RCL může vyžadovat doprovodné statické zdroje, na které může odkazovat buď samotné RCL, nebo aplikace využívající RCL. ASP.NET Core umožňuje vytvářet RCLs (Razor Class Libraries), které zahrnují statické prostředky dostupné pro aplikaci, která je využívá.
Pokud chcete zahrnout doprovodné prostředky jako součást seznamu RCL, vytvořte wwwroot
složku v knihovně tříd a zahrňte do této složky všechny požadované soubory.
Při balení RCL se všechny související soubory ve složce wwwroot
automaticky zahrnou do balíčku.
dotnet pack
Místo verze NuGet.exe nuget pack
použijte příkaz .
Přidání webových assetů klienta do procesu sestavení
Integrace webových prostředků klienta do sestavovacího procesu je náročná. Další informace najdete v tématu Vytvoření webových prostředků klienta pro knihovnu tříd Razor.
Vyloučit statická aktiva
Chcete-li vyloučit statické prostředky, přidejte požadovanou cestu vyloučení do $(DefaultItemExcludes)
skupiny vlastností v souboru projektu. Oddělte položky středníkem (;
).
V následujícím příkladu se šablona stylů lib.css
ve složce wwwroot
nepovažuje za statický prostředek a není zahrnuta v publikovaném RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrace TypeScriptu
Chcete-li zahrnout soubory TypeScript do RCL:
Odkazujte na
Microsoft.TypeScript.MSBuild
balíček NuGet v projektu.Poznámka:
Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.
Umístěte soubory TypeScriptu (
.ts
) mimowwwroot
složku. Například soubory umístěte doClient
složky.Do souboru projektu přidejte následující kód:
- Nakonfigurujte výstup sestavení TypeScriptu pro složku
wwwroot
s vlastnostíTypescriptOutDir
. - Zahrňte cíl TypeScriptu jako závislost cíle
PrepareForBuildDependsOn
. - Odstraňte výstup v
wwwroot folder
.
- Nakonfigurujte výstup sestavení TypeScriptu pro složku
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
// Markup removed for brevity.
<TypescriptOutDir>wwwroot</TypescriptOutDir>
<PrepareForBuildDependsOn>
CompileTypeScriptWithTSConfig;
GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
</PrepareForBuildDependsOn>
</PropertyGroup>
<ItemGroup>
<Content Remove="wwwroot\{path-to-typescript-outputs}" />
</ItemGroup>
</Project>
Využívání obsahu z odkazovaného RCL
Soubory ve složce wwwroot
v RCL jsou vystaveny buď RCL, nebo cílové aplikaci pod předponou _content/{PACKAGE ID}/
. Například knihovna s názvem sestavení Razor.Class.Lib
a bez uvedení <PackageId>
ve svém projektovém souboru vede k cestě ke statickému obsahu na adrese _content/Razor.Class.Lib/
. Při vytváření balíčku NuGet a název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu pro {PACKAGE ID}
.
Využívající aplikace odkazuje na statické prostředky poskytované knihovnou s použitím značek <script>
, <style>
, <img>
a dalších HTML značek. Konzumní aplikace musí mít povolenou podporu statických souborů:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Při spuštění spotřební aplikace z výstupu sestavení (dotnet run
) jsou statické webové prostředky ve vývojovém prostředí ve výchozím nastavení povoleny. Pokud chcete podporovat prostředky v jiných prostředích při spuštění z výstupu sestavení, zavolejte UseStaticWebAssets na host builder v Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Volání UseStaticWebAssets
se nevyžaduje při spuštění aplikace z publikovaného výstupu (dotnet publish
).
Víceprojektový vývojový tok
Při spuštění spotřební aplikace:
- Prostředky v RCL zůstanou v původních složkách. Prostředky se nepřesouvají do spotřebovávající aplikace.
- Jakákoli změna ve složce RCL
wwwroot
se projeví v aplikaci, která RCL používá, po opětovném sestavení RCL, aniž by bylo nutné znovu sestavit samotnou uživatelskou aplikaci.
Při sestavení RCL se vytvoří manifest, který popisuje umístění statických webových prostředků. Spotřebovávající aplikace načítá manifest během běhu, aby čerpala prostředky z odkazovaných projektů a balíčků. Když se do RCL přidá nový prostředek, musí být RCL přestavěno, aby se aktualizoval jeho manifest a aplikace mohla získat přístup k novému prostředku.
Publikovat
Při publikování aplikace se doprovodné prostředky ze všech odkazovaných projektů a balíčků zkopírují do wwwroot
složky publikované aplikace v části _content/{PACKAGE ID}/
. Při vytváření balíčku NuGet a pokud název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu, při zkoumání složky {PACKAGE ID}
s publikovanými prostředky pro wwwroot
.
Další materiály
Razor zobrazení, stránky, kontrolery, modely stránek, Razor komponenty, komponenty zobrazení a datové modely lze integrovat do Razor knihovny tříd (RCL). RCL lze zabalit a znovu použít. Aplikace mohou zahrnovat RCL a přepsat zobrazení a stránky, které obsahuje. Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci.
Informace o tom, jak integrovat npm a webpack do procesu sestavení knihovny Razor tříd, naleznete v tématu Sestavení webových prostředků klienta pro knihovnu Razortříd.
Vytvořte knihovnu tříd obsahující Razor uživatelské rozhraní
- V sadě Visual Studio vyberte Vytvořit nový nový projekt.
- Vyberte Razor knihovnu tříd>Další.
- Pojmenujte knihovnu (například RazorClassLib), >Vytvořte. Aby nedocházelo ke kolizi názvu souboru s vygenerovanou knihovnou zobrazení, ujistěte se, že název knihovny nekončí
.Views
. - Vyberte stránky a zobrazení podpory, pokud potřebujete podporovat zobrazení. Ve výchozím nastavení se podporují jenom Razor stránky. Vyberte Vytvořit.
Šablona Razor knihovny tříd (RCL) je ve výchozím nastavení nastavena na Razor vývoj komponent. Možnost stránky a zobrazení podpory podporuje stránky a zobrazení.
Přidejte Razor soubory do RCL.
Šablony ASP.NET Core předpokládají, že obsah seznamu RCL je ve Areas
složce. Viz níže rozložení stránek RCL pro vytvoření RCL, který zpřístupňuje obsah v ~/Pages
, namísto ~/Areas/Pages
.
Referenční obsah RCL
Na seznam RCL lze odkazovat pomocí:
- Balíček NuGet Viz Vytváření balíčků NuGet a dotnet přidat balíček a Vytvoření a publikování balíčku NuGet.
-
{ProjectName}.csproj
. Podívejte se na dotnet-add reference.
Předdefinování zobrazení, částečných zobrazení a stránek
Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci. Například přidání WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 a Stránka1 ve WebApp1 bude mít přednost před Stránkou1 v RCL.
V ukázkovém souboru přejmenujte WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
pro otestování priority.
Zkopírujte RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
částečné zobrazení do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
složky. Aktualizujte značkování tak, aby označovalo nové umístění. Sestavte a spusťte aplikaci, abyste ověřili, že se používá verze části aplikace.
Pokud RCL používá Razor stránky, povolte služby Pages a koncové body v hostitelské aplikaci:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Rozložení stránek RCL
Pokud chcete odkazovat na obsah seznamu RCL, jako by byl součástí složky webové aplikace Pages
, vytvořte projekt RCL s následující strukturou souborů:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Předpokládejme, že RazorUIClassLib/Pages/Shared
obsahuje dva částečné soubory: _Header.cshtml
a _Footer.cshtml
. Značky <partial>
se dají přidat do _Layout.cshtml
souboru:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Přidejte soubor do složky projektu Pages
RCL pro použití _Layout.cshtml
souboru z hostitelské webové aplikace:
@{
Layout = "_Layout";
}
Vytvoření RCL se statickými prostředky
RCL může vyžadovat doprovodné statické zdroje, na které může odkazovat buď samotné RCL, nebo aplikace využívající RCL. ASP.NET Core umožňuje vytvářet RCLs (Razor Class Libraries), které zahrnují statické prostředky dostupné pro aplikaci, která je využívá.
Pokud chcete zahrnout doprovodné prostředky jako součást seznamu RCL, vytvořte wwwroot
složku v knihovně tříd a zahrňte do této složky všechny požadované soubory.
Při balení RCL se všechny související soubory ve složce wwwroot
automaticky zahrnou do balíčku.
dotnet pack
Místo verze NuGet.exe nuget pack
použijte příkaz .
Vyloučit statická aktiva
Chcete-li vyloučit statické prostředky, přidejte požadovanou cestu vyloučení do $(DefaultItemExcludes)
skupiny vlastností v souboru projektu. Oddělte položky středníkem (;
).
V následujícím příkladu se šablona stylů lib.css
ve složce wwwroot
nepovažuje za statický prostředek a není zahrnuta v publikovaném RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrace TypeScriptu
Chcete-li zahrnout soubory TypeScript do RCL:
Odkazujte na
Microsoft.TypeScript.MSBuild
balíček NuGet v projektu.Poznámka:
Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.
Umístěte soubory TypeScriptu (
.ts
) mimowwwroot
složku. Například soubory umístěte doClient
složky.Nakonfigurujte výstup sestavení TypeScriptu pro složku
wwwroot
.TypescriptOutDir
Nastavte vlastnost uvnitřPropertyGroup
souboru projektu:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Zahrňte cíl TypeScriptu jako závislost
PrepareForBuildDependsOn
cíle tak, že doPropertyGroup
souboru projektu přidáte následující cíl:<PrepareForBuildDependsOn> CompileTypeScript; GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn) </PrepareForBuildDependsOn>
Využívání obsahu z odkazovaného RCL
Soubory ve složce wwwroot
v RCL jsou vystaveny buď RCL, nebo cílové aplikaci pod předponou _content/{PACKAGE ID}/
. Například knihovna s názvem sestavení Razor.Class.Lib
a bez uvedení <PackageId>
ve svém projektovém souboru vede k cestě ke statickému obsahu na adrese _content/Razor.Class.Lib/
. Při vytváření balíčku NuGet a název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu pro {PACKAGE ID}
.
Využívající aplikace odkazuje na statické prostředky poskytované knihovnou s použitím značek <script>
, <style>
, <img>
a dalších HTML značek. Konzumní aplikace musí mít povolenou podporu statických souborů:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Při spuštění spotřební aplikace z výstupu sestavení (dotnet run
) jsou statické webové prostředky ve vývojovém prostředí ve výchozím nastavení povoleny. Pokud chcete podporovat prostředky v jiných prostředích při spuštění z výstupu sestavení, zavolejte UseStaticWebAssets tvůrce hostitelů v Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Poznámka: .NET 6 vyžaduje pouze volání builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets
. Další informace najdete u tohoto problému na GitHubu.
Volání UseStaticWebAssets
se nevyžaduje při spuštění aplikace z publikovaného výstupu (dotnet publish
).
Víceprojektový vývojový tok
Při spuštění spotřební aplikace:
- Prostředky v RCL zůstanou v původních složkách. Prostředky se nepřesouvají do spotřebovávající aplikace.
- Jakákoli změna ve složce RCL
wwwroot
se projeví v aplikaci, která RCL používá, po opětovném sestavení RCL, aniž by bylo nutné znovu sestavit samotnou uživatelskou aplikaci.
Při sestavení RCL se vytvoří manifest, který popisuje umístění statických webových prostředků. Spotřebovávající aplikace načítá manifest během běhu, aby čerpala prostředky z odkazovaných projektů a balíčků. Když se do RCL přidá nový prostředek, musí být RCL přestavěno, aby se aktualizoval jeho manifest a aplikace mohla získat přístup k novému prostředku.
Publikovat
Při publikování aplikace se doprovodné prostředky ze všech odkazovaných projektů a balíčků zkopírují do wwwroot
složky publikované aplikace v části _content/{PACKAGE ID}/
. Při vytváření balíčku NuGet a pokud název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu, při zkoumání složky {PACKAGE ID}
s publikovanými prostředky pro wwwroot
.
Další materiály
Razor zobrazení, stránky, kontrolery, modely stránek, Razor komponenty, komponenty zobrazení a datové modely lze integrovat do Razor knihovny tříd (RCL). RCL lze zabalit a znovu použít. Aplikace mohou zahrnovat RCL a přepsat zobrazení a stránky, které obsahuje. Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Vytvořte knihovnu tříd obsahující Razor uživatelské rozhraní
- V sadě Visual Studio vyberte Vytvořit nový projekt.
- Vyberte Razor knihovnu tříd>Další.
- Pojmenujte knihovnu (například "RazorClassLib"), >Vytvořte>Další. Aby nedocházelo ke kolizi názvu souboru s vygenerovanou knihovnou zobrazení, ujistěte se, že název knihovny nekončí
.Views
. - Vyberte cílovou architekturu. Zkontrolujte ☑ stránky podpory a zobrazení pro podporu zobrazení. Ve výchozím nastavení se podporují jenom Razor komponenty. Vyberte Vytvořit.
Šablona Razor knihovny tříd (RCL) je ve výchozím nastavení určena pro vývoj Razor komponent. Možnost stránky a zobrazení podpory podporuje stránky a zobrazení.
Přidejte Razor soubory do RCL.
Šablony ASP.NET Core předpokládají, že obsah seznamu RCL je ve Areas
složce. Podívejte se na rozložení stránky RCL a vytvořte RCL, který zpřístupňuje obsah v ~/Pages
místo v ~/Areas/Pages
.
Referenční obsah RCL
Na seznam RCL lze odkazovat pomocí:
- Balíček NuGet Viz Vytváření balíčků NuGet a dotnet přidat balíček a Vytvoření a publikování balíčku NuGet.
-
{ProjectName}.csproj
. Podívejte se na dotnet-add reference.
Předdefinování zobrazení, částečných zobrazení a stránek
Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci. Například přidání WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 a Stránka1 ve WebApp1 bude mít přednost před Stránkou1 v RCL.
V ukázkovém souboru přejmenujte WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
pro otestování priority.
Zkopírujte RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
částečné zobrazení do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
složky. Aktualizujte značkování tak, aby označovalo nové umístění. Sestavte a spusťte aplikaci, abyste ověřili, že se používá verze části aplikace.
Rozložení stránek RCL
Pokud chcete odkazovat na obsah seznamu RCL, jako by byl součástí složky webové aplikace Pages
, vytvořte projekt RCL s následující strukturou souborů:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Předpokládejme, že RazorUIClassLib/Pages/Shared
obsahuje dva částečné soubory: _Header.cshtml
a _Footer.cshtml
. Značky <partial>
se dají přidat do _Layout.cshtml
souboru:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Přidejte soubor do složky projektu Pages
RCL pro použití _Layout.cshtml
souboru z hostitelské webové aplikace:
@{
Layout = "_Layout";
}
Vytvoření RCL se statickými prostředky
RCL může vyžadovat doprovodné statické zdroje, na které může odkazovat buď samotné RCL, nebo aplikace využívající RCL. ASP.NET Core umožňuje vytvářet RCLs (Razor Class Libraries), které zahrnují statické prostředky dostupné pro aplikaci, která je využívá.
Pokud chcete zahrnout doprovodné prostředky jako součást seznamu RCL, vytvořte wwwroot
složku v knihovně tříd a zahrňte do této složky všechny požadované soubory.
Při balení RCL se všechny související soubory ve složce wwwroot
automaticky zahrnou do balíčku.
dotnet pack
Místo verze NuGet.exe nuget pack
použijte příkaz .
Vyloučit statická aktiva
Chcete-li vyloučit statické prostředky, přidejte požadovanou cestu vyloučení do $(DefaultItemExcludes)
skupiny vlastností v souboru projektu. Oddělte položky středníkem (;
).
V následujícím příkladu se šablona stylů lib.css
ve složce wwwroot
nepovažuje za statický prostředek a není zahrnuta v publikovaném RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrace TypeScriptu
Chcete-li zahrnout soubory TypeScript do RCL:
Odkazujte na
Microsoft.TypeScript.MSBuild
balíček NuGet v projektu.Poznámka:
Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.
Umístěte soubory TypeScriptu (
.ts
) mimowwwroot
složku. Například soubory umístěte doClient
složky.Nakonfigurujte výstup sestavení TypeScriptu pro složku
wwwroot
.TypescriptOutDir
Nastavte vlastnost uvnitřPropertyGroup
souboru projektu:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Zahrňte cíl TypeScriptu jako závislost
ResolveCurrentProjectStaticWebAssets
cíle tak, že doPropertyGroup
souboru projektu přidáte následující cíl:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Využívání obsahu z odkazovaného RCL
Soubory ve složce wwwroot
v RCL jsou vystaveny buď RCL, nebo cílové aplikaci pod předponou _content/{PACKAGE ID}/
. Například knihovna s názvem sestavení Razor.Class.Lib
a bez uvedení <PackageId>
ve svém projektovém souboru vede k cestě ke statickému obsahu na adrese _content/Razor.Class.Lib/
. Při vytváření balíčku NuGet a název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu pro {PACKAGE ID}
.
Využívající aplikace odkazuje na statické prostředky poskytované knihovnou s použitím značek <script>
, <style>
, <img>
a dalších HTML značek. Aplikace, která tuto funkci využívá, musí mít v Startup.Configure
statických souborů:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Při spuštění spotřební aplikace z výstupu sestavení (dotnet run
) jsou statické webové prostředky ve vývojovém prostředí ve výchozím nastavení povoleny. Pokud chcete podporovat prostředky v jiných prostředích při spuštění z výstupu sestavení, zavolejte UseStaticWebAssets
na tvůrce hostitele v Program.cs
:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
Volání UseStaticWebAssets
se nevyžaduje při spuštění aplikace z publikovaného výstupu (dotnet publish
).
Víceprojektový vývojový tok
Při spuštění spotřební aplikace:
- Prostředky v RCL zůstanou v původních složkách. Prostředky se nepřesouvají do spotřebovávající aplikace.
- Jakákoli změna ve složce RCL
wwwroot
se projeví v aplikaci, která RCL používá, po opětovném sestavení RCL, aniž by bylo nutné znovu sestavit samotnou uživatelskou aplikaci.
Při sestavení RCL se vytvoří manifest, který popisuje umístění statických webových prostředků. Spotřebovávající aplikace načítá manifest během běhu, aby čerpala prostředky z odkazovaných projektů a balíčků. Když se do RCL přidá nový prostředek, musí být RCL přestavěno, aby se aktualizoval jeho manifest a aplikace mohla získat přístup k novému prostředku.
Publikovat
Při publikování aplikace se doprovodné prostředky ze všech odkazovaných projektů a balíčků zkopírují do wwwroot
složky publikované aplikace v části _content/{PACKAGE ID}/
. Při vytváření balíčku NuGet a pokud název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu, při zkoumání složky {PACKAGE ID}
s publikovanými prostředky pro wwwroot
.
Další materiály
Razor zobrazení, stránky, kontrolery, modely stránek, Razor komponenty, komponenty zobrazení a datové modely lze integrovat do Razor knihovny tříd (RCL). RCL lze zabalit a znovu použít. Aplikace mohou zahrnovat RCL a přepsat zobrazení a stránky, které obsahuje. Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Vytvořte knihovnu tříd obsahující Razor uživatelské rozhraní
- V nabídce Soubor Visual Studio vyberte Nový>Projekt.
- Vyberte ASP.NET Základní webová aplikace.
- Pojmenujte knihovnu (například RazorClassLib). > Aby nedocházelo ke kolizi názvu souboru s vygenerovanou knihovnou zobrazení, ujistěte se, že název knihovny nekončí
.Views
. - Ověřte, zda je vybrána možnost ASP.NET Core 2.1 nebo novější.
- Vyberte Razor knihovnu tříd>OK.
Soubor projektu RCL je následující:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
Přidejte Razor soubory do RCL.
Šablony ASP.NET Core předpokládají, že obsah seznamu RCL je ve Areas
složce. Podívejte se na rozložení stránky RCL a vytvořte RCL, který zpřístupňuje obsah v ~/Pages
místo v ~/Areas/Pages
.
Referenční obsah RCL
Na seznam RCL lze odkazovat pomocí:
- Balíček NuGet Viz Vytváření balíčků NuGet a dotnet přidat balíček a Vytvoření a publikování balíčku NuGet.
-
{ProjectName}.csproj
. Podívejte se na dotnet-add reference.
Návod: Vytvoření projektu RCL a jeho použití v projektu Pages Razor
Celý projekt si můžete stáhnout a otestovat ho místo jeho vytváření. Ukázkový soubor ke stažení obsahuje další kód a odkazy, které usnadňují testování projektu. Můžete zanechat zpětnou vazbu v této GitHub issue s komentáři ohledně stahování ukázek ve srovnání s podrobnými pokyny.
Otestování aplikace pro stažení
Pokud byste raději vytvořili projekt návodu místo stahování dokončené aplikace, přejděte na další část.
Otevřete soubor .sln
v sadě Visual Studio. Spustit aplikaci.
Postupujte podle pokynů v testovací webové aplikaci 1.
Vytvořte RCL
V této části se vytvoří RCL. Razor soubory jsou přidány do RCL.
Vytvořte projekt RCL:
- V nabídce Soubor Visual Studio vyberte Nový>Projekt.
- Vyberte ASP.NET Základní webová aplikace.
- Pojmenujte aplikaci RazorUIClassLib>OK.
- Ověřte, zda je vybrána možnost ASP.NET Core 2.1 nebo novější.
- Vyberte Razor knihovnu tříd>OK.
- Přidejte částečný Razor soubor zobrazení s názvem
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
.
Přidání Razor souborů a složek do projektu
Nahraďte kód
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
následujícím kódem:<h3>_Message.cshtml partial view.</h3> <p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>
Nahraďte kód
RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtml
následujícím kódem:@page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <h2>Hello from a Razor UI class library!</h2> <p> From RazorUIClassLib\Areas\MyFeature\Pages\Page1.cshtml</p> <partial name="_Message" />
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
je potřeba k použití částečného zobrazení (<partial name="_Message" />
). Místo zahrnutí@addTagHelper
direktivy můžete přidat_ViewImports.cshtml
soubor. Příklad:dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
Další informace o
_ViewImports.cshtml
importu sdílených direktiv naleznete v tématu Import sdílených direktiv.Sestavte knihovnu tříd, abyste ověřili, že neexistují žádné chyby kompilátoru:
dotnet build RazorUIClassLib
Výstup sestavení obsahuje RazorUIClassLib.dll
a RazorUIClassLib.Views.dll
.
RazorUIClassLib.Views.dll
obsahuje zkompilovaný Razor obsah.
Použijte knihovnu uživatelského rozhraní z projektu Pages RazorRazor
Razor Vytvořte webovou aplikaci Pages:
V Průzkumník řešení klikněte pravým tlačítkem na řešení >Přidat>nový projekt.
Vyberte ASP.NET Základní webová aplikace.
Pojmenujte webovou aplikaci 1.
Ověřte, zda je vybrána možnost ASP.NET Core 2.1 nebo novější.
Vyberte Webová aplikace>OK.
V Průzkumník řešení klikněte pravým tlačítkem na WebApp1 a vyberte Nastavit jako počáteční projekt.
V Průzkumníku řešení klikněte pravým tlačítkem na WebApp1 a vyberte Sestavení závislostí>Závislosti projektu.
Zkontrolujte RazorUIClassLib jako závislost WebApp1.
Z Průzkumníka řešení klikněte pravým tlačítkem na WebApp1 a vyberte Přidat>Odkaz.
V dialogovém okně Správce odkazů zkontrolujte RazorUIClassLib a klikněte na >.
Spustit aplikaci.
Test webové aplikace 1
Přejděte na /MyFeature/Page1
, abyste ověřili, že je knihovna tříd uživatelského rozhraní Razor používána.
Předdefinování zobrazení, částečných zobrazení a stránek
Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci. Například přidání WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 a Stránka1 ve WebApp1 bude mít přednost před Stránkou1 v RCL.
V ukázkovém souboru přejmenujte WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
pro otestování priority.
Zkopírujte RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
částečné zobrazení do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
složky. Aktualizujte značkování tak, aby označovalo nové umístění. Sestavte a spusťte aplikaci, abyste ověřili, že se používá verze části aplikace.
Rozložení stránek RCL
Pokud chcete odkazovat na obsah seznamu RCL, jako by byl součástí složky webové aplikace Pages
, vytvořte projekt RCL s následující strukturou souborů:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Předpokládejme, že RazorUIClassLib/Pages/Shared
obsahuje dva částečné soubory: _Header.cshtml
a _Footer.cshtml
. Značky <partial>
se dají přidat do _Layout.cshtml
souboru:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Razor zobrazení, stránky, kontrolery, modely stránek, Razor komponenty, komponenty zobrazení a datové modely lze integrovat do Razor knihovny tříd (RCL). RCL lze zabalit a znovu použít. Aplikace mohou zahrnovat RCL a přepsat zobrazení a stránky, které obsahuje. Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Vytvořte knihovnu tříd obsahující Razor uživatelské rozhraní
- V sadě Visual Studio vyberte Vytvořit nový nový projekt.
- Vyberte Razor knihovnu tříd>Další.
- Pojmenujte knihovnu (například RazorClassLib), >Vytvořte. Aby nedocházelo ke kolizi názvu souboru s vygenerovanou knihovnou zobrazení, ujistěte se, že název knihovny nekončí
.Views
. - Vyberte stránky a zobrazení podpory, pokud potřebujete podporovat zobrazení. Ve výchozím nastavení se podporují jenom Razor stránky. Vyberte Vytvořit.
Šablona Razor knihovny tříd (RCL) je ve výchozím nastavení určena pro vývoj Razor komponent. Možnost stránky a zobrazení podpory podporuje stránky a zobrazení.
Přidejte Razor soubory do RCL.
Šablony ASP.NET Core předpokládají, že obsah seznamu RCL je ve Areas
složce. Viz níže rozložení stránek RCL pro vytvoření RCL, který zpřístupňuje obsah v ~/Pages
, namísto ~/Areas/Pages
.
Referenční obsah RCL
Na seznam RCL lze odkazovat pomocí:
- Balíček NuGet Viz Vytváření balíčků NuGet a dotnet přidat balíček a Vytvoření a publikování balíčku NuGet.
-
{ProjectName}.csproj
. Podívejte se na dotnet-add reference.
Předdefinování zobrazení, částečných zobrazení a stránek
Když se ve webové aplikaci i v RCL najde zobrazení, částečné zobrazení nebo Razor stránka, přednost bude mít Razor značení (.cshtml
soubor) ve webové aplikaci. Například přidání WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 a Stránka1 ve WebApp1 bude mít přednost před Stránkou1 v RCL.
V ukázkovém souboru přejmenujte WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
pro otestování priority.
Zkopírujte RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
částečné zobrazení do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
složky. Aktualizujte značkování tak, aby označovalo nové umístění. Sestavte a spusťte aplikaci, abyste ověřili, že se používá verze části aplikace.
Pokud RCL používá Razor stránky, povolte služby Pages a koncové body v hostitelské aplikaci:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
Rozložení stránek RCL
Pokud chcete odkazovat na obsah seznamu RCL, jako by byl součástí složky webové aplikace Pages
, vytvořte projekt RCL s následující strukturou souborů:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Předpokládejme, že RazorUIClassLib/Pages/Shared
obsahuje dva částečné soubory: _Header.cshtml
a _Footer.cshtml
. Značky <partial>
se dají přidat do _Layout.cshtml
souboru:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
_ViewStart.cshtml
Přidejte soubor do složky projektu Pages
RCL pro použití _Layout.cshtml
souboru z hostitelské webové aplikace:
@{
Layout = "_Layout";
}
Vytvoření RCL se statickými prostředky
RCL může vyžadovat doprovodné statické zdroje, na které může odkazovat buď samotné RCL, nebo aplikace využívající RCL. ASP.NET Core umožňuje vytvářet RCLs (Razor Class Libraries), které zahrnují statické prostředky dostupné pro aplikaci, která je využívá.
Pokud chcete zahrnout doprovodné prostředky jako součást seznamu RCL, vytvořte wwwroot
složku v knihovně tříd a zahrňte do této složky všechny požadované soubory.
Při balení RCL se všechny související soubory ve složce wwwroot
automaticky zahrnou do balíčku.
dotnet pack
Místo verze NuGet.exe nuget pack
použijte příkaz .
Vyloučit statická aktiva
Chcete-li vyloučit statické prostředky, přidejte požadovanou cestu vyloučení do $(DefaultItemExcludes)
skupiny vlastností v souboru projektu. Oddělte položky středníkem (;
).
V následujícím příkladu se šablona stylů lib.css
ve složce wwwroot
nepovažuje za statický prostředek a není zahrnuta v publikovaném RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integrace TypeScriptu
Chcete-li zahrnout soubory TypeScript do RCL:
Odkazujte na
Microsoft.TypeScript.MSBuild
balíček NuGet v projektu.Poznámka:
Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.
Umístěte soubory TypeScriptu (
.ts
) mimowwwroot
složku. Například soubory umístěte doClient
složky.Nakonfigurujte výstup sestavení TypeScriptu pro složku
wwwroot
.TypescriptOutDir
Nastavte vlastnost uvnitřPropertyGroup
souboru projektu:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Zahrňte cíl TypeScriptu jako závislost
ResolveCurrentProjectStaticWebAssets
cíle tak, že doPropertyGroup
souboru projektu přidáte následující cíl:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Využívání obsahu z odkazovaného RCL
Soubory ve složce wwwroot
v RCL jsou vystaveny buď RCL, nebo cílové aplikaci pod předponou _content/{PACKAGE ID}/
. Například knihovna s názvem sestavení Razor.Class.Lib
a bez uvedení <PackageId>
ve svém projektovém souboru vede k cestě ke statickému obsahu na adrese _content/Razor.Class.Lib/
. Při vytváření balíčku NuGet a název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu pro {PACKAGE ID}
.
Využívající aplikace odkazuje na statické prostředky poskytované knihovnou s použitím značek <script>
, <style>
, <img>
a dalších HTML značek. Aplikace, která tuto funkci využívá, musí mít v Startup.Configure
statických souborů:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Při spuštění spotřební aplikace z výstupu sestavení (dotnet run
) jsou statické webové prostředky ve vývojovém prostředí ve výchozím nastavení povoleny. Pokud chcete podporovat prostředky v jiných prostředích při spuštění z výstupu sestavení, zavolejte UseStaticWebAssets
na hostitelském konfigurátoru v Program.cs
:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
Volání UseStaticWebAssets
se nevyžaduje při spuštění aplikace z publikovaného výstupu (dotnet publish
).
Víceprojektový vývojový tok
Při spuštění spotřební aplikace:
- Prostředky v RCL zůstanou v původních složkách. Prostředky se nepřesouvají do spotřebovávající aplikace.
- Jakákoli změna ve složce RCL
wwwroot
se projeví v aplikaci, která RCL používá, po opětovném sestavení RCL, aniž by bylo nutné znovu sestavit samotnou uživatelskou aplikaci.
Při sestavení RCL se vytvoří manifest, který popisuje umístění statických webových prostředků. Spotřebovávající aplikace načítá manifest během běhu, aby čerpala prostředky z odkazovaných projektů a balíčků. Když se do RCL přidá nový prostředek, musí být RCL přestavěno, aby se aktualizoval jeho manifest a aplikace mohla získat přístup k novému prostředku.
Publikovat
Při publikování aplikace se doprovodné prostředky ze všech odkazovaných projektů a balíčků zkopírují do wwwroot
složky publikované aplikace v části _content/{PACKAGE ID}/
. Při vytváření balíčku NuGet a pokud název sestavení není stejný jako ID balíčku (<PackageId>
v souboru projektu knihovny), použijte ID balíčku, jak je uvedeno v souboru projektu, při zkoumání složky {PACKAGE ID}
s publikovanými prostředky pro wwwroot
.