Herbruikbare gebruikersinterface maken met behulp van het Razor klassebibliotheekproject in ASP.NET Core
Door Rick Anderson
Razor weergaven, pagina's, controllers, paginamodellen, Razor onderdelen, weergaveonderdelenen gegevensmodellen kunnen worden ingebouwd in een Razor klassebibliotheek (RCL). De RCL kan worden verpakt en hergebruikt. Toepassingen kunnen de RCL bevatten en de weergaven en pagina's die deze bevat overschrijven. Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang.
Zie Build-clientwebassets voor uw Razor Class Library-voor informatie over het integreren van npm en webpack in het buildproces voor een RCL.
Een klassebibliotheek maken met een Razor-gebruikersinterface
- Selecteer in Visual Studio Een nieuw project maken.
- Selecteer Razor Klassebibliotheek>Volgende.
- Geef de bibliotheek een naam (bijvoorbeeld 'RazorClassLib'), >Create. Als u een conflict met de gegenereerde weergavebibliotheek wilt voorkomen, moet u ervoor zorgen dat de bibliotheeknaam niet eindigt op
.Views
. - Selecteer Ondersteuningspagina's en weergaven als u wilt dat de bibliotheek pagina's en/of weergaven bevat. Standaard worden alleen Razor onderdelen ondersteund. Selecteer maken.
De Razor Class Library-sjabloon is standaard gericht op de ontwikkeling van Razor-componenten. De optie Ondersteuningspagina's en weergaven ondersteunt pagina's en weergaven. Zie voor meer informatie over RCL-ondersteuning in BlazorASP.NET Core Razor-onderdelen gebruiken vanuit een Razor klassebibliotheek (RCL).
Voeg Razor bestanden toe aan de RCL.
Bij de ASP.NET Core-sjablonen wordt ervan uitgegaan dat de RCL-inhoud zich in de map Areas
bevindt. Zie indeling van RCL-pagina's hieronder om een RCL te maken waarmee inhoud in ~/Pages
wordt weergegeven in plaats van ~/Areas/Pages
.
Referentie RCL-inhoud
Er kan naar de RCL worden verwezen door:
- NuGet-pakket. Zie NuGet-pakketten maken en dotnet-pakket toevoegen en Een NuGet-pakket maken en publiceren.
-
{ProjectName}.csproj
. Zie dotnet-add reference.
Weergaven, gedeeltelijke weergaven en pagina's overschrijven
Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang. Voeg bijvoorbeeld WebApp1/Areas/MyFeature/Pages/Page1.cshtml
toe aan WebApp1 en Page1 in de WebApp1 heeft voorrang op Page1 in de RCL.
Wijzig in het voorbeelddownload de naam van WebApp1/Areas/MyFeature2
in WebApp1/Areas/MyFeature
om de prioriteit te testen.
Kopieer de RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
gedeeltelijke weergave naar WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Werk de markering bij om de nieuwe locatie aan te geven. Bouw en voer de app uit om te verifiëren dat de partiële versie van de app wordt gebruikt.
Als de RCL Razor Pages gebruikt, schakelt u de Razor Pages-services en -eindpunten in de hosting-app in:
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();
Indeling RCL-pagina's
Als u wilt verwijzen naar RCL-inhoud alsof deze deel uitmaakt van de map Pages
van de web-app, maakt u het RCL-project met de volgende bestandsstructuur:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Stel dat RazorUIClassLib/Pages/Shared
twee gedeeltelijke bestanden bevat: _Header.cshtml
en _Footer.cshtml
. De <partial>
tags kunnen worden toegevoegd aan _Layout.cshtml
bestand:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Voeg het _ViewStart.cshtml
bestand toe aan de Pages
map van het RCL-project om het _Layout.cshtml
-bestand te gebruiken vanuit de hostweb-app:
@{
Layout = "_Layout";
}
Een RCL maken met statische assets
Een RCL kan aanvullende statische onderdelen vereisen waarnaar kan worden verwezen door de RCL of de app die de RCL gebruikt. ASP.NET Core maakt het mogelijk om RCL's te maken die statische assets bevatten die beschikbaar zijn voor een verbruikende app.
Als u aanvullende assets wilt opnemen als onderdeel van een RCL, maakt u een wwwroot
map in de klassebibliotheek en neemt u alle vereiste bestanden in die map op.
Wanneer u een RCL inpakt, worden alle bijbehorende assets in de map wwwroot
automatisch opgenomen in het pakket.
Gebruik de opdracht dotnet pack
in plaats van de NuGet.exe versie nuget pack
.
Klantwebresources toevoegen aan het buildproces
Het integreren van clientwebassets in de build-pijplijn is niettrivieel. Zie Clientwebassets bouwen voor uw Razor Class Library voor meer informatie.
Statische assets uitsluiten
Als u statische assets wilt uitsluiten, voegt u het gewenste uitsluitingspad toe aan de $(DefaultItemExcludes)
eigenschapsgroep in het projectbestand. Afzonderlijke vermeldingen met een puntkomma (;
).
In het volgende voorbeeld wordt de lib.css
stylesheet in de map wwwroot
niet beschouwd als een statische asset en is deze niet opgenomen in de gepubliceerde RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Typescript-integratie
TypeScript-bestanden opnemen in een RCL:
Voeg het
Microsoft.TypeScript.MSBuild
NuGet-pakket toe aan het project.Notitie
Zie de artikelen onder Installeren en beheren van pakketten in Pakketverbruikworkflow (NuGet-documentatie)voor hulp bij het toevoegen van pakketten aan .NET-apps. Bevestig de juiste pakketversies op NuGet.org.
Plaats de TypeScript-bestanden (
.ts
) buiten de mapwwwroot
. Plaats de bestanden bijvoorbeeld in eenClient
map.Voeg de volgende markeringen toe aan het projectbestand:
- Configureer de Build-uitvoer van TypeScript voor de map
wwwroot
met de eigenschapTypescriptOutDir
. - Neem het TypeScript-doel op als een afhankelijkheid van het
PrepareForBuildDependsOn
doel. - Verwijder de uitvoer in de
wwwroot folder
.
- Configureer de Build-uitvoer van TypeScript voor de map
<Project Sdk="Microsoft.NET.Sdk.Razor">
<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>
Inhoud gebruiken van een RCL waarnaar wordt verwezen
De bestanden die zijn opgenomen in de map wwwroot
van de RCL worden onder het voorvoegsel _content/{PACKAGE ID}/
toegankelijk gemaakt voor de RCL of de gebruikende app. Een bibliotheek met een assemblynaam van Razor.Class.Lib
en zonder een <PackageId>
die is opgegeven in het projectbestand, resulteert bijvoorbeeld in een pad naar statische inhoud op _content/Razor.Class.Lib/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
.
De verbruikende app verwijst naar statische assets die door de bibliotheek worden geleverd met <script>
, <style>
, <img>
en andere HTML-tags. De verbruikende app moet ondersteuning voor statische bestanden hebben ingeschakeld in:
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();
Wanneer u de verbruikende app uitvoert vanuit build-uitvoer (dotnet run
), worden statische webassets standaard ingeschakeld in de ontwikkelomgeving. Als u assets in andere omgevingen wilt ondersteunen wanneer deze worden uitgevoerd vanuit builduitvoer, roept u UseStaticWebAssets aan op de hostbouwer in 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();
Het aanroepen van UseStaticWebAssets
is niet vereist bij het uitvoeren van een app vanuit gepubliceerde uitvoer (dotnet publish
).
Ontwikkelingsstroom voor meerdere projecten
Wanneer de verbruikende app wordt uitgevoerd:
- De assets in de RCL blijven in hun oorspronkelijke mappen staan. De assets worden niet verplaatst naar de verbruikende app.
- Elke wijziging in de
wwwroot
map van de RCL wordt weerspiegeld in de verbruikende app nadat de RCL opnieuw is opgebouwd en zonder de verbruikende app opnieuw te bouwen.
Wanneer de RCL is gebouwd, wordt er een manifest geproduceerd waarin de statische webassetlocaties worden beschreven. De verbruikende app leest het manifest tijdens runtime om de assets te gebruiken uit projecten en pakketten waarnaar wordt verwezen. Wanneer een nieuwe asset wordt toegevoegd aan een RCL, moet de RCL opnieuw worden opgebouwd om het manifest bij te werken voordat een verbruikende app toegang heeft tot de nieuwe asset.
Uitgeven
Wanneer de app wordt gepubliceerd, worden de bijbehorende assets van alle projecten en pakketten waarnaar wordt verwezen, gekopieerd naar de wwwroot
map van de gepubliceerde app onder _content/{PACKAGE ID}/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
bij het controleren van de map wwwroot
voor de gepubliceerde assets.
Aanvullende informatiebronnen
Razor weergaven, pagina's, controllers, paginamodellen, Razor onderdelen, weergave-componentenen gegevensmodellen kunnen worden ingebouwd in een Razor klassebibliotheek (RCL). De RCL kan worden verpakt en hergebruikt. Toepassingen kunnen de RCL bevatten en de weergaven en pagina's die deze bevat overschrijven. Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang.
Zie voor meer informatie over het integreren van npm en webpack in het buildproces voor een Razor Klassenbibliotheek, webclient-assets bouwen voor uw Razor Klassenbibliotheek.
Een klassebibliotheek maken met Razor-gebruikersinterface
- Selecteer in Visual Studio Een nieuw project maken.
- Selecteer Razor Class Library>Volgende.
- Geef de bibliotheek een naam (bijvoorbeeld 'RazorClassLib'), >Create. Als u een conflict met de gegenereerde weergavebibliotheek wilt voorkomen, moet u ervoor zorgen dat de bibliotheeknaam niet eindigt op
.Views
. - Selecteer ondersteun pagina's en weergaven als u weergaven wilt ondersteunen. Standaard worden alleen Razor Pagina's ondersteund. Selecteer maken.
De sjabloon Razor Class Library (RCL) is standaard voor Razor componentontwikkeling. De optie Ondersteuningspagina's en weergaven ondersteunt pagina's en weergaven.
Voeg Razor bestanden toe aan de RCL.
Bij de ASP.NET Core-sjablonen wordt ervan uitgegaan dat de RCL-inhoud zich in de map Areas
bevindt. Zie indeling van RCL-pagina's hieronder om een RCL te maken waarmee inhoud in ~/Pages
wordt weergegeven in plaats van ~/Areas/Pages
.
Verwijzing naar RCL-inhoud
Er kan naar de RCL worden verwezen door:
- NuGet-pakket. Zie NuGet-pakketten maken en dotnet-pakket toevoegen en Een NuGet-pakket maken en publiceren.
-
{ProjectName}.csproj
. Zie dotnet-add reference.
Weergaven, gedeeltelijke weergaven en pagina's overschrijven
Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang. Voeg bijvoorbeeld WebApp1/Areas/MyFeature/Pages/Page1.cshtml
toe aan WebApp1 en Page1 in de WebApp1 heeft voorrang op Page1 in de RCL.
Wijzig in het voorbeelddownload de naam van WebApp1/Areas/MyFeature2
in WebApp1/Areas/MyFeature
om de prioriteit te testen.
Kopieer de RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
gedeeltelijke weergave naar WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Werk de markering bij om de nieuwe locatie aan te geven. Bouw en voer de app uit om te controleren of de versie van het onderdeel binnen de app in gebruik is.
Als de RCL Razor Pages gebruikt, schakelt u de Razor Pages-services en -eindpunten in de hosting-app in:
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();
Indeling RCL-pagina's
Als u wilt verwijzen naar RCL-inhoud alsof deze deel uitmaakt van de map Pages
van de web-app, maakt u het RCL-project met de volgende bestandsstructuur:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Stel dat RazorUIClassLib/Pages/Shared
twee gedeeltelijke bestanden bevat: _Header.cshtml
en _Footer.cshtml
. De <partial>
tags kunnen worden toegevoegd aan _Layout.cshtml
bestand:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Voeg het _ViewStart.cshtml
bestand toe aan de Pages
map van het RCL-project om het _Layout.cshtml
-bestand te gebruiken vanuit de hostweb-app:
@{
Layout = "_Layout";
}
Een RCL maken met statische assets
Een RCL kan aanvullende statische assets vereisen waarnaar kan worden verwezen door zowel de RCL als de gebruikende app van de RCL. ASP.NET Core maakt het mogelijk om RCL's te maken die statische assets bevatten die beschikbaar zijn voor een verbruikende app.
Als u aanvullende assets wilt opnemen als onderdeel van een RCL, maakt u een wwwroot
map in de klassebibliotheek en neemt u alle vereiste bestanden in die map op.
Wanneer u een RCL inpakt, worden alle bijbehorende assets in de map wwwroot
automatisch opgenomen in het pakket.
Gebruik de opdracht dotnet pack
in plaats van de NuGet.exe versie nuget pack
.
Statische assets uitsluiten
Als u statische assets wilt uitsluiten, voegt u het gewenste uitsluitingspad toe aan de $(DefaultItemExcludes)
eigenschapsgroep in het projectbestand. Afzonderlijke vermeldingen met een puntkomma (;
).
In het volgende voorbeeld wordt de stylesheet lib.css
in de wwwroot
map niet als een statisch bestand beschouwd en is deze niet opgenomen in de gepubliceerde RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Typescript-integratie
TypeScript-bestanden opnemen in een RCL:
Verwijs naar het
Microsoft.TypeScript.MSBuild
NuGet-pakket in het project.Notitie
Zie de artikelen onder Pakketten installeren en beheren in NuGet-documentatie (NuGet-documentatie) voor hulp bij het toevoegen van pakketten aan .NET-apps. Bevestig de juiste pakketversies op NuGet.org.
Plaats de TypeScript-bestanden (
.ts
) buiten de mapwwwroot
. Plaats de bestanden bijvoorbeeld in eenClient
map.Configureer de Build-uitvoer van TypeScript voor de map
wwwroot
. Stel de eigenschapTypescriptOutDir
in van eenPropertyGroup
in het projectbestand:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Voeg het TypeScript-doel toe als een afhankelijkheid van het
PrepareForBuildDependsOn
doel door het volgende doel toe te voegen in eenPropertyGroup
in het projectbestand:<PrepareForBuildDependsOn> CompileTypeScript; GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn) </PrepareForBuildDependsOn>
Inhoud gebruiken van een RCL waarnaar wordt verwezen
De bestanden die zijn opgenomen in de map wwwroot
van de RCL worden beschikbaar gesteld aan de RCL of de gebruikende app onder het voorvoegsel _content/{PACKAGE ID}/
. Een bibliotheek met een assemblynaam van Razor.Class.Lib
en zonder een <PackageId>
die is opgegeven in het projectbestand, resulteert bijvoorbeeld in een pad naar statische inhoud op _content/Razor.Class.Lib/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
.
De verbruikende app verwijst naar statische assets die door de bibliotheek worden geleverd met <script>
, <style>
, <img>
en andere HTML-tags. De verbruikende app moet ondersteuning voor statische bestanden hebben ingeschakeld in:
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();
Wanneer u de verbruikende app uitvoert vanuit build-uitvoer (dotnet run
), worden statische webassets standaard ingeschakeld in de ontwikkelomgeving. Als u assets in andere omgevingen wilt ondersteunen wanneer deze worden uitgevoerd vanuit builduitvoer, roept u UseStaticWebAssets aan op de hostbouwer in 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();
Opmerking: voor .NET 6 is alleen builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets
aanroepen vereist. Zie dit GitHub-probleemvoor meer informatie.
Het aanroepen van UseStaticWebAssets
is niet vereist bij het uitvoeren van een app vanuit gepubliceerde uitvoer (dotnet publish
).
Ontwikkelingsstroom voor meerdere projecten
Wanneer de verbruikende app wordt uitgevoerd:
- De assets in de RCL blijven in hun oorspronkelijke mappen staan. De assets worden niet verplaatst naar de consumptie-app.
- Elke wijziging in de
wwwroot
map van de RCL wordt weerspiegeld in de verbruikende app nadat de RCL opnieuw is opgebouwd en zonder de verbruikende app opnieuw te bouwen.
Wanneer de RCL is gebouwd, wordt er een manifest geproduceerd waarin de statische webassetlocaties worden beschreven. De verbruikende app leest het manifest tijdens runtime om de assets te gebruiken uit projecten en pakketten waarnaar wordt verwezen. Wanneer een nieuwe asset wordt toegevoegd aan een RCL, moet de RCL opnieuw worden opgebouwd om het manifest bij te werken voordat een verbruikende app toegang heeft tot de nieuwe asset.
Uitgeven
Wanneer de app wordt gepubliceerd, worden de bijbehorende assets van alle projecten en pakketten waarnaar wordt verwezen, gekopieerd naar de wwwroot
map van de gepubliceerde app onder _content/{PACKAGE ID}/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
bij het controleren van de map wwwroot
voor de gepubliceerde assets.
Aanvullende informatiebronnen
Razor weergaven, pagina's, controllers, paginamodellen, Razor onderdelen, weergave-onderdelenen gegevensmodellen kunnen worden ingebouwd in een Razor classbibliotheek (RCL). De RCL kan worden verpakt en hergebruikt. Toepassingen kunnen de RCL bevatten en de weergaven en pagina's die deze bevat overschrijven. Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang.
Voorbeeldcode weergeven of downloaden (hoe te downloaden)
Een klassebibliotheek maken met Razor-gebruikersinterface
- Selecteer in Visual Studio Een nieuw project maken.
- Selecteer Razor Class Library>Volgende.
- Geef de bibliotheek een naam (bijvoorbeeld "RazorClassLib"), >>maken Volgende. Als u een conflict met de gegenereerde weergavebibliotheek wilt voorkomen, moet u ervoor zorgen dat de bibliotheeknaam niet eindigt op
.Views
. - Selecteer het doelplatform -. Controleer ☑ ondersteuningspagina's en weergaven om weergaven te ondersteunen. Standaard worden alleen Razor onderdelen ondersteund. Selecteer maken.
De sjabloon van de Razor klasse-bibliotheek (RCL) is standaard ingesteld op Razor componentontwikkeling. De optie Ondersteuningspagina's en weergaven biedt ondersteuning voor pagina's en weergaven.
Voeg Razor bestanden toe aan de RCL.
Bij de ASP.NET Core-sjablonen wordt ervan uitgegaan dat de RCL-inhoud zich in de map Areas
bevindt. Zie indeling van RCL-pagina's om een RCL te maken waarmee inhoud in ~/Pages
wordt weergegeven in plaats van ~/Areas/Pages
.
Verwijs naar RCL-inhoud
Naar de RCL kan worden verwezen door:
- NuGet-pakket. Zie NuGet-pakketten maken en dotnet-pakket toevoegen en Een NuGet-pakket maken en publiceren.
-
{ProjectName}.csproj
. Zie dotnet-add reference.
Weergaven, gedeeltelijke weergaven en pagina's overschrijven
Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang. Voeg bijvoorbeeld WebApp1/Areas/MyFeature/Pages/Page1.cshtml
toe aan WebApp1 en Page1 in de WebApp1 heeft voorrang op Page1 in de RCL.
Wijzig in het voorbeelddownload de naam van WebApp1/Areas/MyFeature2
in WebApp1/Areas/MyFeature
om de prioriteit te testen.
Kopieer de RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
gedeeltelijke weergave naar WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Werk de markering bij om de nieuwe locatie aan te geven. Bouw en voer de app uit om te controleren of de versie van de app van het onderdeel wordt gebruikt.
Indeling RCL-pagina's
Als u wilt verwijzen naar RCL-inhoud alsof deze deel uitmaakt van de map Pages
van de web-app, maakt u het RCL-project met de volgende bestandsstructuur:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Stel dat RazorUIClassLib/Pages/Shared
twee gedeeltelijke bestanden bevat: _Header.cshtml
en _Footer.cshtml
. De <partial>
tags kunnen worden toegevoegd aan _Layout.cshtml
bestand:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Voeg het _ViewStart.cshtml
bestand toe aan de Pages
map van het RCL-project om het _Layout.cshtml
-bestand te gebruiken vanuit de hostweb-app:
@{
Layout = "_Layout";
}
Een RCL maken met statische assets
Een RCL vereist mogelijk aanvullende statische assets waarnaar kan worden verwezen door de RCL of de verbruikende app van de RCL. ASP.NET Core maakt het mogelijk om RCL's te maken die statische assets bevatten die beschikbaar zijn voor een verbruikende app.
Als u aanvullende assets wilt opnemen als onderdeel van een RCL, maakt u een wwwroot
map in de klassebibliotheek en neemt u alle vereiste bestanden in die map op.
Wanneer u een RCL inpakt, worden alle bijbehorende assets in de map wwwroot
automatisch opgenomen in het pakket.
Gebruik de opdracht dotnet pack
in plaats van de NuGet.exe versie nuget pack
.
Statische assets uitsluiten
Als u statische assets wilt uitsluiten, voegt u het gewenste uitsluitingspad toe aan de $(DefaultItemExcludes)
eigenschapsgroep in het projectbestand. Afzonderlijke vermeldingen met een puntkomma (;
).
In het volgende voorbeeld wordt het lib.css
opmaakmodel in de map wwwroot
niet beschouwd als een statische asset en is deze niet opgenomen in de gepubliceerde RCL:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Typescript-integratie
TypeScript-bestanden opnemen in een RCL:
Voeg het
Microsoft.TypeScript.MSBuild
NuGet-pakket toe aan het project.Notitie
Zie de artikelen onder Pakketten installeren en beheren bij Het pakketconsumptiewerkwijze in de NuGet-documentatievoor begeleiding bij het toevoegen van pakketten aan .NET-apps. Bevestig de juiste pakketversies op NuGet.org.
Plaats de TypeScript-bestanden (
.ts
) buiten de mapwwwroot
. Plaats de bestanden bijvoorbeeld in eenClient
map.Configureer de Build-uitvoer van TypeScript voor de map
wwwroot
. Stel de eigenschapTypescriptOutDir
in van eenPropertyGroup
in het projectbestand:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Voeg het TypeScript-doel toe als een afhankelijkheid van het
ResolveCurrentProjectStaticWebAssets
doel door het volgende doel toe te voegen in eenPropertyGroup
in het projectbestand:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Inhoud gebruiken van een RCL waarnaar wordt verwezen
De bestanden die zijn opgenomen in de map wwwroot
van de RCL, worden beschikbaar gesteld aan de RCL of de gebruikersapp onder het voorvoegsel _content/{PACKAGE ID}/
. Een bibliotheek met een assemblynaam van Razor.Class.Lib
en zonder een <PackageId>
die is opgegeven in het projectbestand, resulteert bijvoorbeeld in een pad naar statische inhoud op _content/Razor.Class.Lib/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
.
De verbruikende app verwijst naar statische assets die door de bibliotheek worden geleverd met <script>
, <style>
, <img>
en andere HTML-tags. De verbruikende app moet ondersteuning voor statische bestanden hebben ingeschakeld in Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Wanneer u de verbruikende app uitvoert vanuit build-uitvoer (dotnet run
), worden statische webassets standaard ingeschakeld in de ontwikkelomgeving. Als u assets in andere omgevingen wilt ondersteunen wanneer deze worden uitgevoerd vanuit builduitvoer, roept u UseStaticWebAssets
aan op de hostbouwer in 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>();
});
}
Het aanroepen van UseStaticWebAssets
is niet vereist bij het uitvoeren van een app vanuit gepubliceerde uitvoer (dotnet publish
).
Ontwikkelingsstroom voor meerdere projecten
Wanneer de verbruikende app wordt uitgevoerd:
- De assets in de RCL blijven in hun oorspronkelijke mappen staan. De assets worden niet verplaatst naar de verbruikende app.
- Elke wijziging in de
wwwroot
map van de RCL wordt weerspiegeld in de verbruikende app nadat de RCL opnieuw is opgebouwd en zonder de verbruikende app opnieuw te bouwen.
Wanneer de RCL is gebouwd, wordt er een manifest geproduceerd waarin de statische webassetlocaties worden beschreven. De verbruikende app leest het manifest tijdens runtime om de assets te gebruiken uit projecten en pakketten waarnaar wordt verwezen. Wanneer een nieuwe asset wordt toegevoegd aan een RCL, moet de RCL opnieuw worden opgebouwd om het manifest bij te werken voordat een verbruikende app toegang heeft tot de nieuwe asset.
Uitgeven
Wanneer de app wordt gepubliceerd, worden de bijbehorende assets van alle projecten en pakketten waarnaar wordt verwezen, gekopieerd naar de wwwroot
map van de gepubliceerde app onder _content/{PACKAGE ID}/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
bij het controleren van de map wwwroot
voor de gepubliceerde assets.
Aanvullende informatiebronnen
Razor weergaven, pagina's, controllers, paginamodellen, Razor onderdelen, weergaveonderdelenen gegevensmodellen kunnen worden ingebouwd in een Razor classbibliotheek (RCL). De RCL kan worden verpakt en hergebruikt. Toepassingen kunnen de RCL bevatten en de weergaven en pagina's die deze bevat overschrijven. Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang.
Voorbeeldcode bekijken of downloaden (hoe te downloaden)
Een klassebibliotheek maken met een Razor-gebruikersinterface
- Selecteer in het menu Bestand van Visual Studio Nieuw>Project.
- Selecteer ASP.NET Core Web-applicatie.
- Geef de bibliotheek een naam (bijvoorbeeld 'RazorClassLib') >OK. Als u een conflict met de gegenereerde weergavebibliotheek wilt voorkomen, moet u ervoor zorgen dat de bibliotheeknaam niet eindigt op
.Views
. - Controleer of ASP.NET Core 2.1 of hoger is geselecteerd.
- Selecteer Razor Klassebibliotheek>OK.
Een RCL heeft het volgende projectbestand:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
Voeg Razor bestanden toe aan de RCL.
Bij de ASP.NET Core-sjablonen wordt ervan uitgegaan dat de RCL-inhoud zich in de map Areas
bevindt. Zie indeling van RCL-pagina's om een RCL te maken waarmee inhoud in ~/Pages
wordt weergegeven in plaats van ~/Areas/Pages
.
Referentie RCL-inhoud
Er kan naar de RCL worden verwezen door:
- NuGet-pakket. Zie NuGet-pakketten maken en dotnet-pakket toevoegen en Een NuGet-pakket maken en publiceren.
-
{ProjectName}.csproj
. Zie dotnet-add reference.
Overzicht: Een RCL-project maken en gebruiken vanuit een Razor Pages-project
U kunt het volledige project downloaden en testen in plaats van het te maken. Het voorbeelddownload bevat aanvullende code en koppelingen waarmee het project eenvoudig te testen is. U kunt feedback achterlaten in dit GitHub-probleem met uw opmerkingen over downloadvoorbeelden en stapsgewijze instructies.
De download-app testen
Als u de voltooide app niet hebt gedownload en liever zelf het walkthrough-project wilt maken, springt u naar de volgende sectie.
Open het .sln
-bestand in Visual Studio. Voer de app uit.
Volg de instructies in Test WebApp1
Een RCL maken
In deze sectie wordt een RCL gemaakt. Razor bestanden worden toegevoegd aan de RCL.
Maak het RCL-project:
- Selecteer in het Visual Studio Bestand
menu Nieuw Project . - Selecteer ASP.NET Core Web Application.
- Geef de app de naam RazorUIClassLib>OK.
- Controleer of ASP.NET Core 2.1 of hoger is geselecteerd.
- Selecteer Razor Klassebibliotheek>OK.
- Voeg een Razor gedeeltelijke weergavebestand toe met de naam
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
.
Razor bestanden en mappen toevoegen aan het project
Vervang de markeringen in
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
door de volgende code:<h3>_Message.cshtml partial view.</h3> <p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>
Vervang de markeringen in
RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtml
door de volgende code:@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
is vereist voor het gebruik van de gedeeltelijke weergave (<partial name="_Message" />
). In plaats van de@addTagHelper
instructie op te slaan, kunt u een_ViewImports.cshtml
-bestand toevoegen. Bijvoorbeeld:dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
Zie Gedeelde richtlijnen importeren voor meer informatie over
_ViewImports.cshtml
Bouw de klassebibliotheek om te controleren of er geen compilerfouten zijn:
dotnet build RazorUIClassLib
De build-uitvoer bevat RazorUIClassLib.dll
en RazorUIClassLib.Views.dll
.
RazorUIClassLib.Views.dll
bevat de gecompileerde Razor inhoud.
De Razor UI-bibliotheek gebruiken vanuit een Razor Pages-project
Maak de web-app Razor Pages:
Klik in Solution Explorer-met de rechtermuisknop op de oplossing >Add>New Project.
Selecteer ASP.NET Core Web Application.
Noem de app WebApp1-.
Controleer of ASP.NET Core 2.1 of hoger is geselecteerd.
Selecteer Webtoepassing>OK.
Klik in Solution Explorermet de rechtermuisknop op WebApp1- en selecteer Instellen als opstartproject.
Klik in Solution Explorermet de rechtermuisknop op WebApp1- en selecteer Build Dependencies>Project Dependencies.
Controleer RazorUIClassLib als een afhankelijkheid van WebApp1-.
Klik in Solution Explorermet de rechtermuisknop op WebApp1 en selecteer de optie >Verwijzingtoevoegen.
Controleer in het dialoogvenster Reference ManagerRazorUIClassLib>OK.
Voer de app uit.
WebApp1 testen
Blader naar /MyFeature/Page1
om te controleren of de Razor UI-klassebibliotheek wordt gebruikt.
Overschrijf weergaven, gedeeltelijke weergaven en pagina's
Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang. Voeg bijvoorbeeld WebApp1/Areas/MyFeature/Pages/Page1.cshtml
toe aan WebApp1 en Page1 in de WebApp1 heeft voorrang op Page1 in de RCL.
Wijzig in het voorbeelddownload de naam van WebApp1/Areas/MyFeature2
in WebApp1/Areas/MyFeature
om de prioriteit te testen.
Kopieer de RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
gedeeltelijke weergave naar WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Werk de markering bij om de nieuwe locatie aan te geven. Bouw en voer de app uit om te controleren of de gedeeltelijke versie van de app wordt gebruikt.
Indeling RCL-pagina’s
Als u wilt verwijzen naar RCL-inhoud alsof deze deel uitmaakt van de map Pages
van de web-app, maakt u het RCL-project met de volgende bestandsstructuur:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Stel dat RazorUIClassLib/Pages/Shared
twee gedeeltelijke bestanden bevat: _Header.cshtml
en _Footer.cshtml
. De <partial>
tags kunnen worden toegevoegd aan _Layout.cshtml
bestand:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Razor weergaven, pagina's, controllers, paginamodellen, Razor onderdelen, View-onderdelenen gegevensmodellen kunnen worden ingebouwd in een Razor classbibliotheek (RCL). De RCL kan worden verpakt en hergebruikt. Toepassingen kunnen de RCL bevatten en de weergaven en pagina's die deze bevat overschrijven. Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang.
Bekijk of download voorbeeldcode (hoe te downloaden)
Een klassebibliotheek maken met een Razor-gebruikersinterface
- Selecteer in Visual Studio Een nieuw project maken.
- Selecteer Razor Class Library>Volgende.
- Geef de bibliotheek een naam (bijvoorbeeld 'RazorClassLib'), >Create. Als u een conflict met de gegenereerde weergavebibliotheek wilt voorkomen, moet u ervoor zorgen dat de bibliotheeknaam niet eindigt op
.Views
. - Selecteer ondersteuningspagina's en weergaven als u weergaven wilt ondersteunen. Standaard worden alleen Razor Pagina's ondersteund. Selecteer Maak.
De Razor klassenbibliotheek (RCL) sjabloon is standaard ingesteld op de ontwikkeling van Razor componenten. De optie Ondersteuningspagina's en weergaven biedt ondersteuning voor pagina's en weergaven.
Voeg Razor bestanden toe aan de RCL.
Bij de ASP.NET Core-sjablonen wordt ervan uitgegaan dat de RCL-inhoud zich in de map Areas
bevindt. Zie indeling van RCL-pagina's hieronder om een RCL te maken waarmee inhoud in ~/Pages
wordt weergegeven in plaats van ~/Areas/Pages
.
Referentie RCL-inhoud
Er kan naar de RCL worden verwezen door:
- NuGet-pakket. Zie NuGet-pakketten maken en dotnet-pakket toevoegen en Een NuGet-pakket maken en publiceren.
-
{ProjectName}.csproj
. Zie dotnet-add reference.
Overschrijf weergaven, gedeeltelijke weergaven en pagina's.
Wanneer een weergave, gedeeltelijke weergave of Razor pagina wordt gevonden in zowel de web-app als de RCL, heeft de Razor markering (.cshtml
bestand) in de web-app voorrang. Voeg bijvoorbeeld WebApp1/Areas/MyFeature/Pages/Page1.cshtml
toe aan WebApp1 en Page1 in de WebApp1 heeft voorrang op Page1 in de RCL.
Wijzig in het voorbeelddownload de naam van WebApp1/Areas/MyFeature2
in WebApp1/Areas/MyFeature
om de prioriteit te testen.
Kopieer de RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
gedeeltelijke weergave naar WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Werk de markering bij om de nieuwe locatie aan te geven. Bouw en voer de app uit om te controleren of de gedeeltelijke versie van de app wordt gebruikt.
Als de RCL Razor Pages gebruikt, schakelt u de Razor Pages-services en -eindpunten in de hosting-app in:
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();
});
}
Indeling van RCL-pagina's
Als u wilt verwijzen naar RCL-inhoud alsof deze deel uitmaakt van de map Pages
van de web-app, maakt u het RCL-project met de volgende bestandsstructuur:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Stel dat RazorUIClassLib/Pages/Shared
twee gedeeltelijke bestanden bevat: _Header.cshtml
en _Footer.cshtml
. De <partial>
tags kunnen worden toegevoegd aan _Layout.cshtml
bestand:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Voeg het _ViewStart.cshtml
bestand toe aan de Pages
map van het RCL-project om het _Layout.cshtml
-bestand te gebruiken vanuit de hostweb-app:
@{
Layout = "_Layout";
}
Een RCL maken met statische assets
Een RCL kan aanvullende statische assets nodig hebben waarnaar kan worden verwezen door zowel de RCL als de app die de RCL gebruikt. ASP.NET Core maakt het mogelijk om RCL's te maken die statische assets bevatten die beschikbaar zijn voor een verbruikende app.
Als u aanvullende assets wilt opnemen als onderdeel van een RCL, maakt u een wwwroot
map in de klassebibliotheek en neemt u alle vereiste bestanden in die map op.
Wanneer u een RCL inpakt, worden alle bijbehorende assets in de map wwwroot
automatisch opgenomen in het pakket.
Gebruik de opdracht dotnet pack
in plaats van de NuGet.exe versie nuget pack
.
Statische assets uitsluiten
Als u statische assets wilt uitsluiten, voegt u het gewenste uitsluitingspad toe aan de $(DefaultItemExcludes)
eigenschapsgroep in het projectbestand. Afzonderlijke vermeldingen met een puntkomma (;
).
In het volgende voorbeeld wordt het lib.css
stijlblad in de map wwwroot
niet beschouwd als een statische bron en is het niet opgenomen in de gepubliceerde RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Typescript-integratie
TypeScript-bestanden opnemen in een RCL:
Verwijs naar het
Microsoft.TypeScript.MSBuild
NuGet-pakket in het project.Notitie
Zie de artikelen onder Pakketten installeren en beheren bij Package consumption workflow (NuGet-documentatie)voor hulp bij het toevoegen van pakketten aan .NET-apps. Bevestig de juiste pakketversies op NuGet.org.
Plaats de TypeScript-bestanden (
.ts
) buiten de mapwwwroot
. Plaats de bestanden bijvoorbeeld in eenClient
map.Configureer de Build-uitvoer van TypeScript voor de map
wwwroot
. Stel de eigenschapTypescriptOutDir
in van eenPropertyGroup
in het projectbestand:<TypescriptOutDir>wwwroot</TypescriptOutDir>
Voeg het TypeScript-doel toe als een afhankelijkheid van het
ResolveCurrentProjectStaticWebAssets
doel door het volgende doel toe te voegen in eenPropertyGroup
in het projectbestand:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Inhoud gebruiken van een RCL waarnaar wordt verwezen
De bestanden die zijn opgenomen in de map wwwroot
van de RCL, worden toegankelijk gemaakt voor de RCL of de gebruikende app onder het voorvoegsel _content/{PACKAGE ID}/
. Een bibliotheek met een assemblynaam van Razor.Class.Lib
en zonder een <PackageId>
die is opgegeven in het projectbestand, resulteert bijvoorbeeld in een pad naar statische inhoud op _content/Razor.Class.Lib/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
.
De verbruikende app verwijst naar statische assets die door de bibliotheek worden geleverd met <script>
, <style>
, <img>
en andere HTML-tags. De applicatie die bestanden verbruikt moet ondersteuning voor statische bestanden hebben ingeschakeld in Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Wanneer u de verbruikende app uitvoert vanuit build-uitvoer (dotnet run
), worden statische webassets standaard ingeschakeld in de ontwikkelomgeving. Als u assets in andere omgevingen wilt ondersteunen wanneer deze worden uitgevoerd vanuit builduitvoer, roept u UseStaticWebAssets
aan op de hostbouwer in 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>();
});
}
Het aanroepen van UseStaticWebAssets
is niet vereist bij het uitvoeren van een app vanuit gepubliceerde uitvoer (dotnet publish
).
Ontwikkelingsstroom voor meerdere projecten
Wanneer de verbruikende app wordt uitgevoerd:
- De assets in de RCL blijven in hun oorspronkelijke mappen staan. De assets worden niet verplaatst naar de verbruikende app.
- Elke wijziging in de
wwwroot
map van de RCL wordt weerspiegeld in de verbruikende app nadat de RCL opnieuw is opgebouwd en zonder de verbruikende app opnieuw te bouwen.
Wanneer de RCL is gebouwd, wordt er een manifest geproduceerd waarin de statische webassetlocaties worden beschreven. De verbruikende app leest het manifest tijdens runtime om de assets te gebruiken uit projecten en pakketten waarnaar wordt verwezen. Wanneer een nieuwe asset wordt toegevoegd aan een RCL, moet de RCL opnieuw worden opgebouwd om het manifest bij te werken voordat een verbruikende app toegang heeft tot de nieuwe asset.
Uitgeven
Wanneer de app wordt gepubliceerd, worden de bijbehorende assets van alle projecten en pakketten waarnaar wordt verwezen, gekopieerd naar de wwwroot
map van de gepubliceerde app onder _content/{PACKAGE ID}/
. Wanneer u een NuGet-pakket maakt en de assemblynaam niet hetzelfde is als de pakket-id (<PackageId>
in het projectbestand van de bibliotheek), gebruikt u de pakket-id zoals opgegeven in het projectbestand voor {PACKAGE ID}
bij het controleren van de map wwwroot
voor de gepubliceerde assets.