Tworzenie wielokrotnego użytku interfejsu użytkownika przy użyciu projektu biblioteki klas w programie ASP.NET Core
Autor: Rick Anderson
Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki widoków i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). Można spakować i ponownie użyć RCL. Aplikacje mogą zawierać listę RCL i przesłaniać widoki i strony, które zawiera. Gdy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w liście RCL, Razor pierwszeństwo ma znacznik (.cshtml
plik) w aplikacji internetowej.
Aby uzyskać informacje na temat sposobu integrowania npm i webpack z procesem kompilacji dla biblioteki klas RCL, zobacz Tworzenie zasobów internetowych klienta dla Razor biblioteki klas.
Tworzenie biblioteki klas zawierającej interfejs Razor użytkownika
- W programie Visual Studio wybierz pozycję Utwórz nowy projekt.
- Wybierz Razor Bibliotekę klas>, Dalej.
- Nadaj bibliotece nazwę (na przykład "RazorClassLib"), >Utwórz. Aby uniknąć kolizji nazwy pliku z wygenerowaną biblioteką widoków, upewnij się, że nazwa biblioteki nie kończy się na .
.Views
- Wybierz pozycję Strony i widoki pomocy technicznej, jeśli potrzebujesz, aby biblioteka zawierała strony i/lub widoki. Domyślnie obsługiwane są tylko Razor składniki. Wybierz pozycję Utwórz.
Szablon Razor Biblioteka Klas jest domyślnie przeznaczony do Razor tworzenia składników. Opcja Strony i Widoki wspiera strony i widoki. Aby uzyskać więcej informacji na temat wsparcia RCL w programie Blazor, zobacz Korzystanie ze składników ASP.NET Core Razor z biblioteki klas Razor (RCL).
Dodaj pliki Razor do RCL.
Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas
. Zobacz układ stron RCL poniżej, aby utworzyć RCL, która eksponuje zawartość ~/Pages
zamiast ~/Areas/Pages
.
Odwołanie do zawartości RCL
Lista RCL może być przywołynięta przez:
- Pakiet NuGet. Zobacz Tworzenie pakietów NuGet, dotnet add package oraz Tworzenie i publikowanie pakietu NuGet.
-
{ProjectName}.csproj
. Zobacz odwołanie dotnet-add.
Przesłanianie widoków, widoków częściowych i stron
Gdy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w liście RCL, Razor pierwszeństwo ma znacznik (.cshtml
plik) w aplikacji internetowej. Na przykład dodanie WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 spowoduje, że Page1 w WebApp1 będzie mieć pierwszeństwo przed Page1 w RCL.
W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
w celu przetestowania pierwszeństwa.
Skopiuj widok częściowy RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Zaktualizuj znaczniki, aby wskazać nową lokalizację. Skompiluj i uruchom aplikację, aby sprawdzić, czy używana jest częściowa wersja aplikacji.
Jeśli RCL używa Razor Pages, włącz Razor usługi Pages i punkty końcowe w aplikacji hostującej:
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();
Układ stron RCL
Aby odwołać się do zawartości listy RCL, tak jakby była częścią folderu aplikacji Pages
internetowej, utwórz projekt listy RCL z następującą strukturą plików:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Załóżmy, że RazorUIClassLib/Pages/Shared
zawiera dwa częściowe pliki: _Header.cshtml
i _Footer.cshtml
. Tagi <partial>
można dodać do _Layout.cshtml
pliku:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Dodaj plik _ViewStart.cshtml
do folderu projektu RCL Pages
, aby użyć pliku _Layout.cshtml
z aplikacji hostującej w sieci.
@{
Layout = "_Layout";
}
Utwórz RCL ze statycznymi zasobami
Biblioteka RCL może wymagać towarzyszących zasobów statycznych, do których mogą odwoływać się zarówno biblioteka RCL, jak i aplikacja korzystająca z tej biblioteki. ASP.NET Core umożliwia tworzenie bibliotek RCL, które zawierają zasoby statyczne dostępne dla aplikacji korzystającej z nich.
Aby uwzględnić zasoby towarzyszące w ramach listy RCL, utwórz wwwroot
folder w bibliotece klas i uwzględnij wszystkie wymagane pliki w tym folderze.
Podczas pakowania RCL wszystkie zasoby towarzyszące w folderze wwwroot
są automatycznie dołączane do pakietu.
dotnet pack
Użyj polecenia, a nie wersji NuGet.exe nuget pack
.
Dodawanie zasobów internetowych klienta do procesu kompilacji
Integrowanie zasobów internetowych klienta z procesem kompilacji jest nietrywialne. Aby uzyskać więcej informacji, zobacz Tworzenie zasobów internetowych klienta dla Razor biblioteki klas.
Wyklucz zasoby statyczne
Aby wykluczyć zasoby statyczne, dodaj żądaną ścieżkę wykluczenia do $(DefaultItemExcludes)
grupy właściwości w pliku projektu. Oddzielaj wpisy średnikami (;
).
W poniższym przykładzie arkusz stylów lib.css
w folderze wwwroot
nie jest traktowany jako zasób statyczny i nie jest uwzględniony w opublikowanej bibliotece RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integracja z typescript
Aby dołączyć pliki TypeScript do biblioteki RCL:
Dodaj odwołanie do pakietu NuGet
Microsoft.TypeScript.MSBuild
w projekcie.Uwaga
Aby uzyskać instrukcje dodawania pakietów do aplikacji .NET, zobacz artykuły w sekcji Instalowanie pakietów i zarządzanie nimi w temacie Przepływ pracy użycia pakietów (dokumentacja programu NuGet). Sprawdź prawidłowe wersje pakietów pod adresem NuGet.org.
Umieść pliki TypeScript (
.ts
) poza folderemwwwroot
. Na przykład umieść pliki w folderzeClient
.Dodaj następujący znacznik do pliku projektu:
- Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla folderu
wwwroot
za pomocą właściwościTypescriptOutDir
. - Uwzględnij cel TypeScript jako zależność celu
PrepareForBuildDependsOn
. - Usuń dane wyjściowe w
wwwroot folder
.
- Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla folderu
<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>
Korzystanie z zawartości z zreferencjonowanej RCL
Pliki znajdujące się w folderze wwwroot
RCL są widoczne dla RCL lub aplikacji używającej pod prefiksem _content/{PACKAGE ID}/
. Na przykład biblioteka z nazwą zestawu Razor.Class.Lib
i bez <PackageId>
określonego w pliku projektu skutkuje ścieżką do zawartości statycznej pod adresem _content/Razor.Class.Lib/
. Podczas tworzenia pakietu NuGet, a nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
.
Aplikacja korzystająca odwołuje się do zasobów statycznych udostępnianych przez bibliotekę, używając tagów HTML takich jak <script>
, <style>
, <img>
i innych. Aplikacja zużywająca musi mieć włączoną obsługę plików statycznych w:
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();
Podczas uruchamiania aplikacji konsumującej z danych wyjściowych kompilacji (dotnet run
) statyczne zasoby internetowe są domyślnie włączone w środowisku deweloperskim. Aby obsługiwać zasoby w innych środowiskach podczas uruchamiania z wyniku kompilacji, wywołaj UseStaticWebAssets na builderze hosta w 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();
Wywołanie UseStaticWebAssets
nie jest wymagane podczas uruchamiania aplikacji z opublikowanych danych wyjściowych (dotnet publish
).
Przepływ rozwoju obejmujący wiele projektów
Gdy aplikacja zużywana jest uruchamiana:
- Zasoby w RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji odbierającej.
- Wszelkie zmiany w folderze listy RCL są odzwierciedlane w aplikacji zużywającej po ponownym skompilowaniu listy RCL
wwwroot
i bez ponownego kompilowania aplikacji zużywającej.
Podczas kompilowania listy RCL tworzony jest manifest opisujący statyczne lokalizacje zasobów internetowych. Aplikacja zużywająca odczytuje manifest w czasie wykonywania, aby korzystać z zasobów z przywoływalnych projektów i pakietów. Po dodaniu nowego zasobu do listy RCL należy ponownie skompilować listę RCL, aby zaktualizować manifest, zanim aplikacja zużywająca będzie mogła uzyskać dostęp do nowego zasobu.
Publikowanie
Po opublikowaniu aplikacji zasoby towarzyszące ze wszystkich z przywoływanych projektów i pakietów są kopiowane do folderu opublikowanej aplikacji w obszarze _content/{PACKAGE ID}/
. Podczas tworzenia pakietu NuGet i nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
podczas badania folderu wwwroot
dla opublikowanych zasobów.
Dodatkowe zasoby
Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). RCL można spakować i ponownie użyć. Aplikacje mogą zawierać RCL i zastępować jego widoki oraz strony. Gdy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w liście RCL, Razor pierwszeństwo ma znacznik (.cshtml
plik) w aplikacji internetowej.
Aby uzyskać informacje na temat sposobu integrowania pakietu npm i webpack z procesem Razor kompilacji biblioteki klas, zobacz Tworzenie zasobów internetowych klienta dla Razor biblioteki klas.
Tworzenie biblioteki klas zawierającej interfejs Razor użytkownika
- W programie Visual Studio wybierz pozycję Utwórz nowy projekt.
- Wybierz pozycję Razor Biblioteka klas> Dalej.
- Nadaj bibliotece nazwę (na przykład "RazorClassLib"), >Utwórz. Aby uniknąć kolizji nazwy pliku z wygenerowaną biblioteką widoków, upewnij się, że nazwa biblioteki nie kończy się na .
.Views
- Wybierz Strony i widoki wsparcia, jeśli potrzebujesz obsługiwać widoki. Domyślnie obsługiwane są tylko Razor strony. Wybierz pozycję Utwórz.
Szablon Razor biblioteki klas (RCL) domyślnie służy do Razor tworzenia składników. Opcja pomocy technicznej: Strony i widoki obsługuje strony i widoki.
Dodaj Razor pliki do RCL.
Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas
. Zobacz poniżej układ stron RCL, aby utworzyć RCL, które uwidacznia zawartość w ~/Pages
zamiast w ~/Areas/Pages
.
Odwołanie do zawartości RCL
Lista RCL może być przywołynięta przez:
- Pakiet NuGet. Zobacz Tworzenie pakietów NuGet i dotnet add package oraz Tworzenie i publikowanie pakietu NuGet.
-
{ProjectName}.csproj
. Zobacz dotnet-add reference.
Przesłanianie widoków, częściowych widoków i stron
Gdy widok, widok częściowy lub Razor strona znajduje się zarówno w aplikacji sieciowej, jak i w bibliotece RCL, priorytet ma znacznik Razor (.cshtml
plik) w aplikacji sieciowej. Na przykład dodanie WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do WebApp1 sprawi, że Page1 w WebApp1 będzie mieć pierwszeństwo przed Page1 w RCL.
W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
w celu przetestowania pierwszeństwa.
Skopiuj widok częściowy RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Zaktualizuj znaczniki, aby oznaczyć nową lokalizację. Skompiluj i uruchom aplikację, aby sprawdzić, czy używana jest wersja częściowa aplikacji.
Jeśli RCL używa Razor stron, uruchom Razor usługi Pages i punkty końcowe w aplikacji hostującej.
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();
Układ stron RCL
Aby odwołać się do zawartości listy RCL, tak jakby była częścią folderu aplikacji Pages
internetowej, utwórz projekt listy RCL z następującą strukturą plików:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Załóżmy, że RazorUIClassLib/Pages/Shared
zawiera dwa częściowe pliki: _Header.cshtml
i _Footer.cshtml
. Tagi <partial>
można dodać do _Layout.cshtml
pliku:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Dodaj plik _ViewStart.cshtml
do folderu projektu Pages
RCL, aby użyć pliku _Layout.cshtml
z hostowanej aplikacji webowej.
@{
Layout = "_Layout";
}
Utwórz RCL ze statycznymi zasobami
Biblioteka RCL może wymagać towarzyszących zasobów statycznych, do których można odwoływać się zarówno z poziomu samej biblioteki RCL, jak i aplikacji korzystającej z tej biblioteki. ASP.NET Core umożliwia tworzenie list RCLs zawierających zasoby statyczne, które są dostępne dla aplikacji zużywanej.
Aby uwzględnić zasoby towarzyszące w ramach listy RCL, utwórz wwwroot
folder w bibliotece klas i uwzględnij wszystkie wymagane pliki w tym folderze.
Przy pakowaniu RCL wszystkie zasoby towarzyszące w folderze wwwroot
są automatycznie dołączane do pakietu.
dotnet pack
Użyj polecenia, a nie wersji NuGet.exe nuget pack
.
Wyklucz zasoby statyczne
Aby wykluczyć zasoby statyczne, dodaj żądaną ścieżkę wykluczenia do $(DefaultItemExcludes)
grupy właściwości w pliku projektu. Oddzielaj wpisy średnikami (;
).
W poniższym przykładzie lib.css
arkusz stylów w folderze wwwroot
nie jest uważany za zasób statyczny i nie jest uwzględniony w opublikowanym RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integracja z typescript
Aby włączyć pliki TypeScript do RCL:
Odwołaj się do
Microsoft.TypeScript.MSBuild
pakietu NuGet w projekcie.Uwaga
Aby uzyskać instrukcje dodawania pakietów do aplikacji .NET, zobacz artykuły w sekcji Instalowanie pakietów i zarządzanie nimi w temacie Przepływ pracy użycia pakietów (dokumentacja programu NuGet). Sprawdź prawidłowe wersje pakietów pod adresem NuGet.org.
Umieść pliki TypeScript (
.ts
) poza folderemwwwroot
. Na przykład umieść pliki w folderzeClient
.Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla
wwwroot
folderu. Ustaw właściwośćTypescriptOutDir
wewnątrz elementuPropertyGroup
w pliku projektu.<TypescriptOutDir>wwwroot</TypescriptOutDir>
Dodaj cel TypeScript jako zależność celu
PrepareForBuildDependsOn
, umieszczając następujący cel wewnątrzPropertyGroup
w pliku projektu:<PrepareForBuildDependsOn> CompileTypeScript; GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn) </PrepareForBuildDependsOn>
Konsumpcja zawartości z odniesionego RCL
Pliki zawarte w wwwroot
folderze RCL są widoczne dla RCL lub aplikacji korzystającej pod prefiksem _content/{PACKAGE ID}/
. Na przykład biblioteka o nazwie zestawu Razor.Class.Lib
i bez <PackageId>
określonej w swoim pliku projektu skutkuje umieszczeniem ścieżki do zawartości statycznej pod adresem _content/Razor.Class.Lib/
. Podczas tworzenia pakietu NuGet, gdy nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
programu.
Aplikacja korzystająca odwołuje się do zasobów statycznych udostępnianych przez bibliotekę za pomocą tagów HTML <script>
, <style>
, <img>
i innych. Aplikacja zużywająca musi mieć włączoną obsługę plików statycznych w:
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();
W przypadku uruchamiania aplikacji z wyników kompilacji (dotnet run
) statyczne zasoby internetowe są domyślnie włączone w środowisku deweloperskim. Aby wspierać zasoby w innych środowiskach podczas uruchamiania z wyników kompilacji, wywołaj UseStaticWebAssets na konstruktorze hosta w 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();
Uwaga: platforma .NET 6 wymaga tylko wywołania metody builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets
. Aby uzyskać więcej informacji, zobacz ten problem w serwisie GitHub.
Wywołanie UseStaticWebAssets
nie jest wymagane podczas uruchamiania aplikacji z opublikowanych danych wyjściowych (dotnet publish
).
Przepływ rozwoju obejmujący wiele projektów
Gdy aplikacja zużywana jest uruchamiana:
- Zasoby w bibliotece RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji zużywających.
- Wszelkie zmiany w folderze
wwwroot
RCL są odzwierciedlane w aplikacji używającej po ponownym skompilowaniu RCL i bez ponownego kompilowania aplikacji używającej.
Podczas kompilowania listy RCL tworzony jest manifest opisujący statyczne lokalizacje zasobów internetowych. Aplikacja zużywająca odczytuje manifest w czasie wykonywania, aby korzystać z zasobów z przywoływalnych projektów i pakietów. Po dodaniu nowego zasobu do listy RCL należy ponownie skompilować listę RCL, aby zaktualizować manifest, zanim aplikacja zużywająca będzie mogła uzyskać dostęp do nowego zasobu.
Publikowanie
Po opublikowaniu aplikacji zasoby towarzyszące ze wszystkich przywoływanych projektów i pakietów są kopiowane do folderu wwwroot
opublikowanej aplikacji do katalogu _content/{PACKAGE ID}/
. Podczas tworzenia pakietu NuGet, a nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
podczas badania folderu wwwroot
dla opublikowanych zasobów.
Dodatkowe zasoby
Razor widoki, strony, kontrolery, modele stron, Razor składniki, elementy widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). RCL można spakować i ponownie użyć. Aplikacje mogą zawierać RCL i zastępować widoki oraz strony, które zawiera. Gdy widok, widok częściowy lub Razor strona są znalezione zarówno w aplikacji internetowej, jak i bibliotece RCL, znacznik Razor (.cshtml
plik) w aplikacji internetowej ma pierwszeństwo.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Tworzenie biblioteki klas zawierającej interfejs Razor użytkownika
- W programie Visual Studio wybierz pozycję Utwórz nowy projekt.
- Wybierz Razor Bibliotekę klas>Dalej.
- Nadaj bibliotece nazwę (na przykład "RazorClassLib"), >Utwórz>Dalej. Aby uniknąć kolizji nazwy pliku z wygenerowaną biblioteką widoków, upewnij się, że nazwa biblioteki nie kończy się na .
.Views
- Wybierz platformę docelową. Sprawdź ☑ strony i widoki wsparcia, aby zapewnić wsparcie dla widoków. Domyślnie obsługiwane są tylko Razor składniki. Wybierz pozycję Utwórz.
Szablon Razor biblioteki klas (RCL) domyślnie służy do tworzenia składników Razor. Opcja Wsparcie dla stron i widoków obsługuje strony i widoki.
Dodaj Razor pliki do RCL.
Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas
. Zobacz układ stron RCL, aby utworzyć RCL, które uwidacznia zawartość w ~/Pages
zamiast ~/Areas/Pages
.
Odwołanie do zawartości RCL
Lista RCL może być przywołynięta przez:
- Pakiet NuGet. Zobacz Tworzenie pakietów NuGet, dotnet add package oraz Tworzenie i publikowanie pakietu NuGet.
-
{ProjectName}.csproj
. Zobacz dotnet-add reference.
Przesłanianie widoków, częściowych widoków i stron
Gdy widok, widok częściowy lub Razor strona jest znaleziony zarówno w aplikacji internetowej, jak i w RCL, Razor pierwszeństwo ma znacznik (.cshtml
plik) w aplikacji internetowej. Na przykład dodanie WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do aplikacji WebApp1 sprawi, że Page1 w WebApp1 będzie mieć pierwszeństwo przed Page1 w bibliotece RCL.
W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
, aby przetestować pierwszeństwo.
Skopiuj widok częściowy RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Zaktualizuj znaczniki, aby wskazać nową lokalizację. Skompiluj i uruchom aplikację, aby sprawdzić, czy używana jest częściowa wersja aplikacji.
Układ stron RCL
Aby odwołać się do zawartości listy RCL, tak jakby była częścią folderu aplikacji Pages
internetowej, utwórz projekt listy RCL z następującą strukturą plików:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Załóżmy, że RazorUIClassLib/Pages/Shared
zawiera dwa częściowe pliki: _Header.cshtml
i _Footer.cshtml
. Tagi <partial>
można dodać do _Layout.cshtml
pliku:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Dodaj plik _ViewStart.cshtml
do folderu projektu RCL Pages
, aby użyć pliku _Layout.cshtml
z aplikacji internetowej hosta.
@{
Layout = "_Layout";
}
Tworzenie RCL z zasobami statycznymi
Biblioteka RCL może wymagać towarzyszących zasobów statycznych, do których można odwoływać się zarówno przez bibliotekę RCL, jak i przez aplikację korzystającą z RCL. ASP.NET Core umożliwia tworzenie list RCLs zawierających zasoby statyczne, które są dostępne dla aplikacji zużywanej.
Aby uwzględnić zasoby towarzyszące w ramach listy RCL, utwórz wwwroot
folder w bibliotece klas i uwzględnij wszystkie wymagane pliki w tym folderze.
Podczas pakowania pakietu RCL wszystkie zasoby powiązane w folderze wwwroot
są automatycznie dołączane do pakietu.
dotnet pack
Użyj polecenia, a nie wersji NuGet.exe nuget pack
.
Wyklucz zasoby statyczne
Aby wykluczyć zasoby statyczne, dodaj żądaną ścieżkę wykluczenia do $(DefaultItemExcludes)
grupy właściwości w pliku projektu. Oddzielaj wpisy średnikami (;
).
W poniższym przykładzie arkusz stylów lib.css
w folderze wwwroot
nie jest uważany za zasób statyczny i nie jest uwzględniony w opublikowanej bibliotece RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integracja z typescript
Aby dołączyć pliki TypeScript do RCL:
Odwołaj się do pakietu NuGet
Microsoft.TypeScript.MSBuild
w projekcie.Uwaga
Aby uzyskać instrukcje dodawania pakietów do aplikacji .NET, zobacz artykuły w sekcji Instalowanie pakietów i zarządzanie nimi w temacie Przepływ pracy użycia pakietów (dokumentacja programu NuGet). Sprawdź prawidłowe wersje pakietów pod adresem NuGet.org.
Umieść pliki TypeScript (
.ts
) poza folderemwwwroot
. Na przykład umieść pliki w folderzeClient
.Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla
wwwroot
folderu. Aby ustawić właściwośćTypescriptOutDir
, umieść ją w elemenciePropertyGroup
w pliku projektu.<TypescriptOutDir>wwwroot</TypescriptOutDir>
Uwzględnij obiekt docelowy TypeScript jako zależność
ResolveCurrentProjectStaticWebAssets
obiektu docelowego, dodając następujący element docelowy wewnątrzPropertyGroup
elementu w pliku projektu:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Korzystanie z zawartości z referencyjnego RCL.
Pliki zawarte w folderze RCL są widoczne dla biblioteki RCL lub aplikacji korzystającej pod prefiksem _content/{PACKAGE ID}/
. Na przykład biblioteka o nazwie zestawu Razor.Class.Lib
, bez określenia <PackageId>
w pliku projektu, prowadzi do utworzenia ścieżki zawartości statycznej pod adresem _content/Razor.Class.Lib/
. Podczas tworzenia pakietu NuGet, jeśli nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
.
Aplikacja korzystająca odwołuje się do zasobów statycznych udostępnianych przez bibliotekę za pomocą tagów HTML <script>
, <style>
, <img>
i innych. Aplikacja zużywająca musi mieć włączoną obsługę plików statycznych w programie Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Podczas uruchamiania aplikacji konsumenckiej z danych wyjściowych kompilacji (dotnet run
), statyczne zasoby internetowe są domyślnie włączone w środowisku deweloperskim. Aby obsługiwać zasoby w innych środowiskach podczas uruchamiania z danych wyjściowych kompilacji, wywołaj UseStaticWebAssets
na obiekcie host builder w 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>();
});
}
Wywołanie UseStaticWebAssets
nie jest wymagane podczas uruchamiania aplikacji z opublikowanych danych wyjściowych (dotnet publish
).
Przepływ rozwoju obejmującego wiele projektów
Gdy aplikacja zużywana jest uruchamiana:
- Zasoby w RCL pozostają w swoich oryginalnych folderach. Zasoby nie są przenoszone do aplikacji korzystającej.
- Wszelkie zmiany w folderze RCL
wwwroot
są odzwierciedlane w aplikacji korzystającej po ponownym skompilowaniu RCL, bez potrzeby ponownego kompilowania aplikacji.
Podczas kompilowania listy RCL tworzony jest manifest opisujący statyczne lokalizacje zasobów internetowych. Aplikacja zużywająca odczytuje manifest w czasie wykonywania, aby korzystać z zasobów z przywoływalnych projektów i pakietów. Po dodaniu nowego zasobu do listy RCL należy ponownie skompilować listę RCL, aby zaktualizować manifest, zanim aplikacja zużywająca będzie mogła uzyskać dostęp do nowego zasobu.
Publikowanie
Po opublikowaniu aplikacji, zasoby towarzyszące ze wszystkich przywoływanych projektów i pakietów są kopiowane do folderu wwwroot
opublikowanej aplikacji w katalogu _content/{PACKAGE ID}/
. Podczas tworzenia pakietu NuGet, a nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu, aby {PACKAGE ID}
został użyty podczas badania folderu wwwroot
dla opublikowanych zasobów.
Dodatkowe zasoby
Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki widoku, oraz modele danych mogą być wbudowane w bibliotekę klas (RCL). Element RCL można spakować i ponownie użyć. Aplikacje mogą zawierać RCL i przesłaniać widoki oraz strony, które on zawiera. Gdy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w RCL, Razor znacznik (.cshtml
plik) w aplikacji internetowej ma pierwszeństwo.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Tworzenie biblioteki klas zawierającej interfejs Razor użytkownika
- W menu programu Visual Studio Plik wybierz Nowy>Projekt.
- Wybierz pozycję ASP.NET Core Web Application(Podstawowa aplikacja internetowa).
- Nadaj bibliotece nazwę (na przykład "RazorClassLib"). > Aby uniknąć kolizji nazwy pliku z wygenerowaną biblioteką widoków, upewnij się, że nazwa biblioteki nie kończy się na .
.Views
- Sprawdź, czy wybrano ASP.NET Core 2.1 lub nowszy.
- Wybierz Razor bibliotekę klas>OK.
RCL ma następujący plik projektu:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
Dodaj Razor pliki do RCL.
Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas
. Zobacz Układ stron RCL, aby utworzyć listę RCL, która udostępnia zawartość ~/Pages
zamiast ~/Areas/Pages
.
Odwołanie do zawartości RCL
RCL może być przywołana przez:
- Pakiet NuGet. Zobacz Tworzenie pakietów NuGet oraz dotnet add package i Tworzenie i publikowanie pakietu NuGet.
-
{ProjectName}.csproj
. Zobacz dotnet-add reference.
Przewodnik: tworzenie projektu RCL i używanie go z projektu Pages
Możesz pobrać kompletny projekt i przetestować go zamiast go tworzyć. Przykładowy plik do pobrania zawiera dodatkowy kod i linki, które ułatwiają testowanie projektu. Możesz zostawić opinię w tym zgłoszeniu na GitHubie z komentarzami dotyczącymi pobierania przykładów w porównaniu do instrukcji krok po kroku.
Testowanie aplikacji pobierania
Jeśli jeszcze nie pobrałeś ukończonej aplikacji i zamiast tego wolisz utworzyć projekt walkthrough, przejdź do następnej sekcji.
.sln
Otwórz plik w programie Visual Studio. Uruchom aplikację.
Postępuj zgodnie z instrukcjami w artykule Testowanie aplikacji internetowej WebApp1
Utwórz RCL
W tej sekcji tworzony jest RCL. Razor pliki są dodawane do RCL.
Utwórz projekt RCL:
- W programie Visual Studio z menu Plik wybierz Nowy>Projekt.
- Wybierz pozycję ASP.NET Core Web Application(Podstawowa aplikacja internetowa).
- Nadaj aplikacji nazwę RazorUIClassLib>OK.
- Sprawdź, czy wybrano ASP.NET Core 2.1 lub nowszy.
- Wybierz Razor Bibliotekę klas>OK.
- Dodaj plik widoku częściowego Razor o nazwie
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
.
Dodawanie Razor plików i folderów do projektu
Zastąp znaczniki
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
następującym kodem:<h3>_Message.cshtml partial view.</h3> <p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>
Zastąp znaczniki
RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtml
następującym kodem:@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
jest wymagane do korzystania z widoku częściowego (<partial name="_Message" />
). Zamiast dołączać dyrektywę@addTagHelper
, można dodać plik_ViewImports.cshtml
. Na przykład:dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
Aby uzyskać więcej informacji na temat
_ViewImports.cshtml
, zobacz Importowanie dyrektyw udostępnionychSkompiluj bibliotekę klas, aby sprawdzić, czy nie ma żadnych błędów kompilatora:
dotnet build RazorUIClassLib
Dane wyjściowe kompilacji zawierają RazorUIClassLib.dll
i RazorUIClassLib.Views.dll
.
RazorUIClassLib.Views.dll
zawiera skompilowaną Razor zawartość.
Korzystanie z biblioteki interfejsu użytkownika Razor z projektu Razor Pages
Utwórz aplikację Razor internetową Pages:
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie >Dodaj>nowy projekt.
Wybierz pozycję ASP.NET Core Web Application(Podstawowa aplikacja internetowa).
Nadaj aplikacji nazwę WebApp1.
Sprawdź, czy wybrano ASP.NET Core 2.1 lub nowszy.
Wybierz Aplikacja internetowa>OK.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję WebApp1 i wybierz polecenie Ustaw jako projekt startowy.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy na WebApp1, a następnie wybierz Zależności kompilacji>Zależności projektu.
Sprawdź bibliotekę RazorUIClassLib jako zależność aplikacji WebApp1.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy na WebApp1 i wybierz Dodaj>Odwołanie.
W oknie dialogowym Menedżera odwołań zaznacz RazorUIClassLib>OK.
Uruchom aplikację.
Testowanie aplikacji internetowej 1
Przejdź do /MyFeature/Page1
, aby sprawdzić, czy biblioteka klas interfejsu użytkownika Razor jest używana.
Przesłanianie widoków, widoków częściowych i stron
Gdy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w RCL, znacznik (Razor plik) w aplikacji internetowej daje pierwszeństwo. Na przykład, dodaj WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do aplikacji WebApp1, a Page1 w aplikacji WebApp1 będzie miała pierwszeństwo nad Page1 w RCL.
W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
, aby przetestować pierwszeństwo.
Skopiuj widok częściowy RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Zaktualizuj oznaczenia, aby wskazać nową lokalizację. Skompiluj i uruchom aplikację, aby sprawdzić, czy używana jest częściowa wersja aplikacji.
Układ stron RCL
Aby odwołać się do zawartości listy RCL, tak jakby była częścią folderu aplikacji Pages
internetowej, utwórz projekt listy RCL z następującą strukturą plików:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Załóżmy, że RazorUIClassLib/Pages/Shared
zawiera dwa częściowe pliki: _Header.cshtml
i _Footer.cshtml
. Tagi <partial>
można dodać do _Layout.cshtml
pliku:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki widoku składniki widoku i modele danych mogą być skompilowane w bibliotekę Razor klas (RCL). RCL można spakować i ponownie użyć. Aplikacje mogą włączać RCL i zastępować widoki oraz strony, które ono zawiera. Kiedy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w środowisku RCL, znacznik (Razor plik) w aplikacji internetowej ma pierwszeństwo.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Tworzenie biblioteki klas zawierającej interfejs Razor użytkownika
- W programie Visual Studio wybierz pozycję Utwórz nowy projekt.
- Wybierz Razor Bibliotekę klas>, a następnie Dalej.
- Nadaj bibliotece nazwę (na przykład "RazorClassLib"), >Utwórz. Aby uniknąć kolizji nazwy pliku z wygenerowaną biblioteką widoków, upewnij się, że nazwa biblioteki nie kończy się na .
.Views
- Wybierz pozycję Strony i widoki pomocy technicznej, jeśli chcesz obsługiwać widoki. Domyślnie obsługiwane są tylko Razor strony. Wybierz pozycję Utwórz.
Szablon Razor biblioteki klas (RCL) domyślnie służy do Razor rozwoju komponentów. Opcja Strony i widoki wspiera strony i widoki.
Dodaj Razor pliki do RCL.
Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas
. Zobacz poniżej układ stron RCL, aby utworzyć RCL, który udostępnia zawartość w ~/Pages
zamiast w ~/Areas/Pages
.
Odwołanie do zawartości RCL
Lista RCL może być przywołynięta przez:
- Pakiet NuGet. Zobacz Tworzenie pakietów NuGet oraz dotnet add package i Tworzenie i publikowanie pakietu NuGet.
-
{ProjectName}.csproj
. Zobacz dotnet-add reference.
Przesłanianie widoków, widoków częściowych i stron
Gdy widok, widok częściowy lub Razor strona zostanie znaleziony zarówno w aplikacji internetowej, jak i w bibliotece RCL, w aplikacji internetowej pierwszeństwo ma znacznik Razor (.cshtml
plik). Na przykład dodaj WebApp1/Areas/MyFeature/Pages/Page1.cshtml
do aplikacji WebApp1, a strona Page1 w aplikacji WebApp1 będzie miała priorytet nad stroną Page1 w RCL.
W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2
na WebApp1/Areas/MyFeature
aby przetestować kolejność.
Skopiuj widok częściowy RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
do WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
. Zaktualizuj znaczniki, aby wskazać nową lokalizację. Skompiluj i uruchom aplikację, aby sprawdzić, czy używana jest wersja fragmentu aplikacji.
Jeśli RCL używa Razor stron, włącz Razor usługi Pages i punkty końcowe w aplikacji hostującej:
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();
});
}
Układ stron RCL
Aby odwołać się do zawartości listy RCL, tak jakby była częścią folderu aplikacji Pages
internetowej, utwórz projekt listy RCL z następującą strukturą plików:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
Załóżmy, że RazorUIClassLib/Pages/Shared
zawiera dwa częściowe pliki: _Header.cshtml
i _Footer.cshtml
. Tagi <partial>
można dodać do _Layout.cshtml
pliku:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Aby użyć pliku _Layout.cshtml
z aplikacji internetowej hosta, dodaj plik _ViewStart.cshtml
do folderu projektu RCL Pages
.
@{
Layout = "_Layout";
}
Tworzenie biblioteki RCL ze statycznymi zasobami
RCL może wymagać towarzyszących zasobów statycznych, do których można się odwoływać zarówno przez RCL, jak i aplikację używającą RCL. ASP.NET Core umożliwia tworzenie list RCLs zawierających zasoby statyczne, które są dostępne dla aplikacji zużywanej.
Aby uwzględnić zasoby towarzyszące w ramach listy RCL, utwórz wwwroot
folder w bibliotece klas i uwzględnij wszystkie wymagane pliki w tym folderze.
Podczas pakowania RCL, wszystkie zasoby towarzyszące w folderze wwwroot
są automatycznie dołączane do pakietu.
dotnet pack
Użyj polecenia, a nie wersji NuGet.exe nuget pack
.
Wyklucz zasoby statyczne
Aby wykluczyć zasoby statyczne, dodaj żądaną ścieżkę wykluczenia do $(DefaultItemExcludes)
grupy właściwości w pliku projektu. Oddzielaj wpisy średnikami (;
).
W poniższym przykładzie arkusz stylów lib.css
w folderze wwwroot
nie jest uważany za zasób statyczny i nie jest uwzględniony w opublikowanym RCL.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integracja z typescript
Aby dołączyć pliki TypeScript do listy RCL:
Dołącz
Microsoft.TypeScript.MSBuild
pakiet NuGet do projektu.Uwaga
Aby uzyskać instrukcje dodawania pakietów do aplikacji .NET, zobacz artykuły w sekcji Instalowanie pakietów i zarządzanie nimi w temacie Przepływ pracy użycia pakietów (dokumentacja programu NuGet). Sprawdź prawidłowe wersje pakietów pod adresem NuGet.org.
Umieść pliki TypeScript (
.ts
) poza folderemwwwroot
. Na przykład umieść pliki w folderzeClient
.Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla
wwwroot
folderu. Ustaw właściwośćTypescriptOutDir
wewnątrz elementuPropertyGroup
w pliku projektu.<TypescriptOutDir>wwwroot</TypescriptOutDir>
Uwzględnij cel TypeScript jako zależność celu
ResolveCurrentProjectStaticWebAssets
poprzez dodanie następującego celu wewnątrzPropertyGroup
w pliku projektu.<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Zawartość konsumowana z referencyjnego RCL
Pliki zawarte w folderze wwwroot
biblioteki RCL są widoczne dla RCL lub aplikacji korzystającej pod prefiksem _content/{PACKAGE ID}/
. Na przykład biblioteka z nazwą zestawu Razor.Class.Lib
i bez określenia <PackageId>
w pliku projektu skutkuje ścieżką do zawartości statycznej w ścieżce _content/Razor.Class.Lib/
. Podczas tworzenia pakietu NuGet, gdy nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
.
Aplikacja użytkowa odwołuje się do zasobów statycznych udostępnianych przez bibliotekę za pomocą tagów HTML <script>
, <style>
, <img>
i innych. Aplikacja konsumująca musi mieć włączoną obsługę plików statycznych w Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
W przypadku uruchamiania aplikacji korzystającej z wyników kompilacji (dotnet run
) statyczne zasoby internetowe są domyślnie włączone w środowisku programistycznym. Aby obsługiwać zasoby w innych środowiskach podczas uruchamiania z danych wyjściowych kompilacji, wywołaj UseStaticWebAssets
konstruktora hosta w programie 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>();
});
}
Wywołanie UseStaticWebAssets
nie jest wymagane podczas uruchamiania aplikacji z opublikowanych danych wyjściowych (dotnet publish
).
Przepływ rozwoju wielu projektów
Gdy aplikacja zużywana jest uruchamiana:
- Zasoby w RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji wykorzystującej.
- Wszelkie zmiany w folderze RCL są odzwierciedlane w aplikacji korzystającej po przebudowaniu folderu RCL
wwwroot
i bez potrzeby ponownego przebudowania aplikacji korzystającej.
Podczas kompilowania listy RCL tworzony jest manifest opisujący statyczne lokalizacje zasobów internetowych. Aplikacja zużywająca odczytuje manifest w czasie wykonywania, aby korzystać z zasobów z przywoływalnych projektów i pakietów. Po dodaniu nowego zasobu do listy RCL należy ponownie skompilować listę RCL, aby zaktualizować manifest, zanim aplikacja zużywająca będzie mogła uzyskać dostęp do nowego zasobu.
Publikowanie
Po opublikowaniu aplikacji, zasoby towarzyszące ze wszystkich przywoływanych projektów i pakietów są kopiowane do folderu wwwroot
opublikowanej aplikacji w obszarze _content/{PACKAGE ID}/
. Podczas tworzenia pakietu NuGet i gdy nazwa zestawu nie jest taka sama jak identyfikator pakietu (<PackageId>
w pliku projektu biblioteki), użyj identyfikatora pakietu określonego w pliku projektu dla {PACKAGE ID}
podczas przeglądania folderu wwwroot
w poszukiwaniu opublikowanych zasobów.