Udostępnij za pośrednictwem


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:

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 folderem wwwroot . Na przykład umieść pliki w folderze Client .

  • Dodaj następujący znacznik do pliku projektu:

    • Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla folderu wwwroot za pomocą właściwości TypescriptOutDir.
    • Uwzględnij cel TypeScript jako zależność celu PrepareForBuildDependsOn.
    • Usuń dane wyjściowe w wwwroot folder.
<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:

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:

  1. 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.

  2. Umieść pliki TypeScript (.ts) poza folderem wwwroot . Na przykład umieść pliki w folderze Client .

  3. Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla wwwroot folderu. Ustaw właściwość TypescriptOutDir wewnątrz elementu PropertyGroup w pliku projektu.

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Dodaj cel TypeScript jako zależność celu PrepareForBuildDependsOn, umieszczając następujący cel wewnątrz PropertyGroup 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:

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:

  1. 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.

  2. Umieść pliki TypeScript (.ts) poza folderem wwwroot . Na przykład umieść pliki w folderze Client .

  3. Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla wwwroot folderu. Aby ustawić właściwość TypescriptOutDir, umieść ją w elemencie PropertyGroup w pliku projektu.

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Uwzględnij obiekt docelowy TypeScript jako zależność ResolveCurrentProjectStaticWebAssets obiektu docelowego, dodając następujący element docelowy wewnątrz PropertyGroup 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:

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ępnionych

  • Skompiluj 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:

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:

  1. 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.

  2. Umieść pliki TypeScript (.ts) poza folderem wwwroot . Na przykład umieść pliki w folderze Client .

  3. Skonfiguruj dane wyjściowe kompilacji języka TypeScript dla wwwroot folderu. Ustaw właściwość TypescriptOutDir wewnątrz elementu PropertyGroup w pliku projektu.

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Uwzględnij cel TypeScript jako zależność celu ResolveCurrentProjectStaticWebAssets poprzez dodanie następującego celu wewnątrz PropertyGroup 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.

Dodatkowe zasoby