Tworzenie interfejsu Razor użytkownika wielokrotnego użytku 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, składniki widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). Listę RCL można spakować i ponownie użyć. 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 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 pozycję Strony i widoki pomocy technicznej, jeśli chcesz, aby biblioteka zawierała strony i/lub widoki. Domyślnie obsługiwane są tylko Razor składniki. Wybierz pozycję Utwórz.

Szablon Razor biblioteki klas (RCL) domyślnie domyślnie służy do Razor tworzenia składników. Opcja Strony i widoki pomocy technicznej obsługuje strony i widoki. Aby uzyskać więcej informacji na temat obsługi listy RCL w programie Blazor, zobacz Korzystanie z składników ASP.NET Core Razor z Razor biblioteki klas (RCL).

Dodaj Razor pliki do listy RCL.

Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas . Zobacz układ stron listy RCL poniżej, aby utworzyć listę RCL, która uwidacznia zawartość ~/Pages zamiast ~/Areas/Pages.

Odwołanie do zawartości listy 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 usługi WebApp1 i Page1 w aplikacji WebApp1 będzie mieć pierwszeństwo przed stroną Page1 na liście RCL.

W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2 na , aby WebApp1/Areas/MyFeature 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 wersja aplikacji częściowej.

Jeśli lista RCL używa Razor stron, włącz Razor usługi Pages i punkty końcowe w aplikacji hostingu:

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 listy 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>

_ViewStart.cshtml Dodaj plik do folderu projektu Pages listy RCL, aby użyć _Layout.cshtml pliku z aplikacji internetowej hosta:

@{
    Layout = "_Layout";
}

Tworzenie listy RCL ze statycznymi elementami zawartości

Lista RCL może wymagać towarzyszących zasobów statycznych, do których można odwoływać się przez listę RCL lub aplikację zużywającą listy 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 listy RCL wszystkie zasoby towarzyszące w wwwroot folderze 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 potokiem kompilacji jest nietrywialne. Aby uzyskać więcej informacji, zobacz Tworzenie zasobów internetowych klienta dla Razor biblioteki klas.

Wykluczanie zasobów statycznych

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 element zawartości statycznej i nie jest uwzględniony w opublikowanej liście RCL:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Integracja z typescript

Aby dołączyć pliki TypeScript do listy RCL:

  1. Odwołanie 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. TypescriptOutDir Ustaw właściwość wewnątrz elementu PropertyGroup w pliku projektu:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Uwzględnij obiekt docelowy TypeScript jako zależność PrepareForBuildDependsOn obiektu docelowego, dodając następujący element docelowy wewnątrz PropertyGroup elementu w pliku projektu:

    <PrepareForBuildDependsOn>
      CompileTypeScript;
      GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
    </PrepareForBuildDependsOn>
    

Korzystanie z zawartości z odwołania do listy RCL

Pliki zawarte w wwwroot folderze listy RCL są widoczne dla listy RCL lub aplikacji zużywanej pod prefiksem _content/{PACKAGE ID}/. Na przykład biblioteka o nazwie Razor.Class.Lib zestawu i bez <PackageId> określonej w pliku projektu powoduje ścieżkę do zawartości statycznej pod adresem _content/Razor.Class.Lib/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam 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ą <script>tagów HTML , <style>, <img>i . 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 zużywanej 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 konstruktora hosta w programie 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 programowania obejmującego wiele projektów

Gdy aplikacja zużywana jest uruchamiana:

  • Zasoby na liście RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji zużywających.
  • 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 przywoływane projekty i pakiety są kopiowane do wwwroot folderu opublikowanej aplikacji w obszarze _content/{PACKAGE ID}/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam jak identyfikator pakietu (<PackageId> w pliku projektu biblioteki) użyj identyfikatora pakietu określonego w pliku projektu, aby {PACKAGE ID} podczas badania wwwroot folderu dla opublikowanych zasobów.

Dodatkowe zasoby

Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki, składniki widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). Listę RCL można spakować i ponownie użyć. 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 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 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 domyślnie służy do Razor tworzenia składników. Opcja Strony i widoki pomocy technicznej obsługuje strony i widoki.

Dodaj Razor pliki do listy RCL.

Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas . Zobacz układ stron listy RCL poniżej, aby utworzyć listę RCL, która uwidacznia zawartość ~/Pages zamiast ~/Areas/Pages.

Odwołanie do zawartości listy 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 usługi WebApp1 i Page1 w aplikacji WebApp1 będzie mieć pierwszeństwo przed stroną Page1 na liście RCL.

W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2 na , aby WebApp1/Areas/MyFeature 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 wersja aplikacji częściowej.

Jeśli lista RCL używa Razor stron, włącz Razor usługi Pages i punkty końcowe w aplikacji hostingu:

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 listy 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>

_ViewStart.cshtml Dodaj plik do folderu projektu Pages listy RCL, aby użyć _Layout.cshtml pliku z aplikacji internetowej hosta:

@{
    Layout = "_Layout";
}

Tworzenie listy RCL ze statycznymi elementami zawartości

Lista RCL może wymagać towarzyszących zasobów statycznych, do których można odwoływać się przez listę RCL lub aplikację zużywającą listy 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 listy RCL wszystkie zasoby towarzyszące w wwwroot folderze są automatycznie dołączane do pakietu.

dotnet pack Użyj polecenia, a nie wersji NuGet.exe nuget pack.

Wykluczanie zasobów statycznych

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 element zawartości statycznej i nie jest uwzględniony w opublikowanej liście RCL:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Integracja z typescript

Aby dołączyć pliki TypeScript do listy RCL:

  1. Odwołanie 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. TypescriptOutDir Ustaw właściwość wewnątrz elementu PropertyGroup w pliku projektu:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Uwzględnij obiekt docelowy TypeScript jako zależność PrepareForBuildDependsOn obiektu docelowego, dodając następujący element docelowy wewnątrz PropertyGroup elementu w pliku projektu:

    <PrepareForBuildDependsOn>
      CompileTypeScript;
      GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
    </PrepareForBuildDependsOn>
    

Korzystanie z zawartości z odwołania do listy RCL

Pliki zawarte w wwwroot folderze listy RCL są widoczne dla listy RCL lub aplikacji zużywanej pod prefiksem _content/{PACKAGE ID}/. Na przykład biblioteka o nazwie Razor.Class.Lib zestawu i bez <PackageId> określonej w pliku projektu powoduje ścieżkę do zawartości statycznej pod adresem _content/Razor.Class.Lib/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam 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ą <script>tagów HTML , <style>, <img>i . 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 zużywanej 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 konstruktora hosta w programie 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 programowania obejmującego wiele projektów

Gdy aplikacja zużywana jest uruchamiana:

  • Zasoby na liście RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji zużywających.
  • 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 przywoływane projekty i pakiety są kopiowane do wwwroot folderu opublikowanej aplikacji w obszarze _content/{PACKAGE ID}/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam jak identyfikator pakietu (<PackageId> w pliku projektu biblioteki) użyj identyfikatora pakietu określonego w pliku projektu, aby {PACKAGE ID} podczas badania wwwroot folderu dla opublikowanych zasobów.

Dodatkowe zasoby

Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki, składniki widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). Listę RCL można spakować i ponownie użyć. 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.

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 pozycję Razor Biblioteka>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 pomocy technicznej, aby obsługiwać widoki. Domyślnie obsługiwane są tylko Razor składniki. Wybierz pozycję Utwórz.

Szablon Razor biblioteki klas (RCL) domyślnie domyślnie służy do Razor tworzenia składników. Opcja Strony i widoki pomocy technicznej obsługuje strony i widoki.

Dodaj Razor pliki do listy RCL.

Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas . Zobacz Układ stron listy RCL, aby utworzyć listę RCL, która uwidacznia zawartość ~/Pages zamiast ~/Areas/Pages.

Odwołanie do zawartości listy 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 usługi WebApp1 i Page1 w aplikacji WebApp1 będzie mieć pierwszeństwo przed stroną Page1 na liście RCL.

W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2 na , aby WebApp1/Areas/MyFeature 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 wersja aplikacji częściowej.

Układ stron listy 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>

_ViewStart.cshtml Dodaj plik do folderu projektu Pages listy RCL, aby użyć _Layout.cshtml pliku z aplikacji internetowej hosta:

@{
    Layout = "_Layout";
}

Tworzenie listy RCL ze statycznymi elementami zawartości

Lista RCL może wymagać towarzyszących zasobów statycznych, do których można odwoływać się przez listę RCL lub aplikację zużywającą listy 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 listy RCL wszystkie zasoby towarzyszące w wwwroot folderze są automatycznie dołączane do pakietu.

dotnet pack Użyj polecenia, a nie wersji NuGet.exe nuget pack.

Wykluczanie zasobów statycznych

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 element zawartości statycznej i nie jest uwzględniony w opublikowanej liście RCL:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Integracja z typescript

Aby dołączyć pliki TypeScript do listy RCL:

  1. Odwołanie 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. TypescriptOutDir Ustaw właściwość wewnątrz elementu 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 odwołania do listy RCL

Pliki zawarte w wwwroot folderze listy RCL są widoczne dla listy RCL lub aplikacji zużywanej pod prefiksem _content/{PACKAGE ID}/. Na przykład biblioteka o nazwie Razor.Class.Lib zestawu i bez <PackageId> określonej w pliku projektu powoduje ścieżkę do zawartości statycznej pod adresem _content/Razor.Class.Lib/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam 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ą <script>tagów HTML , <style>, <img>i . 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();

    ...
}

W przypadku uruchamiania aplikacji zużywanej 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 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 programowania obejmującego wiele projektów

Gdy aplikacja zużywana jest uruchamiana:

  • Zasoby na liście RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji zużywających.
  • 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 przywoływane projekty i pakiety są kopiowane do wwwroot folderu opublikowanej aplikacji w obszarze _content/{PACKAGE ID}/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam jak identyfikator pakietu (<PackageId> w pliku projektu biblioteki) użyj identyfikatora pakietu określonego w pliku projektu, aby {PACKAGE ID} podczas badania wwwroot folderu dla opublikowanych zasobów.

Dodatkowe zasoby

Razor widoki, strony, kontrolery, modele stron, Razor składniki, składniki, składniki widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). Listę RCL można spakować i ponownie użyć. 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.

Wyświetl lub pobierz przykładowy kod (jak pobrać)

Tworzenie biblioteki klas zawierającej interfejs Razor użytkownika

  • W menu Plik programu Visual Studio wybierz pozycję Nowy>projekt.
  • Wybierz pozycję ASP.NET Core Web Application(Podstawowa aplikacja internetowa).
  • Nadaj bibliotece nazwę (na przykład "RazorClassLib") >OK. 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 pozycję Biblioteka>klas OK.

Lista 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 listy RCL.

Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas . Zobacz Układ stron listy RCL, aby utworzyć listę RCL, która uwidacznia zawartość ~/Pages zamiast ~/Areas/Pages.

Odwołanie do zawartości listy RCL

Lista RCL może być przywołynięta przez:

Przewodnik: tworzenie projektu listy RCL i używanie go z Razor 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 problemie z usługą GitHub z komentarzami dotyczącymi pobierania przykładów w porównaniu z instrukcjami krok po kroku.

Testowanie aplikacji pobierania

Jeśli ukończona aplikacja nie została pobrana i wolisz utworzyć projekt przewodnika, 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

Tworzenie listy RCL

W tej sekcji zostanie utworzona lista RCL. Razor pliki są dodawane do listy RCL.

Utwórz projekt listy RCL:

  • W menu Plik programu Visual Studio wybierz pozycję Nowy>projekt.
  • Wybierz pozycję ASP.NET Core Web Application(Podstawowa aplikacja internetowa).
  • Nadaj aplikacji nazwę UIClassLib>OK.Razor
  • Sprawdź, czy wybrano ASP.NET Core 2.1 lub nowszy.
  • Wybierz Razor pozycję Biblioteka>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ć @addTagHelper dyrektywę _ViewImports.cshtml , można dodać plik. Na przykład:

    dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
    

    Aby uzyskać więcej informacji na temat _ViewImports.cshtmlprogramu , 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 wartości i RazorUIClassLib.Views.dll. RazorUIClassLib.Views.dll zawiera skompilowana Razor zawartość.

Korzystanie z biblioteki interfejsu Razor użytkownika z Razor projektu 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 pozycję Aplikacja>internetowa OK.

  • W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję WebApp1 i wybierz polecenie Ustaw jako projekt startowy.

  • W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję WebApp1 i wybierz pozycję Build Dependencies Project Dependencies> (Zależności projektu kompilacji).

  • Sprawdź Razorelement UIClassLib jako zależność aplikacji WebApp1.

  • W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję WebApp1 i wybierz pozycję Dodaj>odwołanie.

  • W oknie dialogowym Menedżer odwołań sprawdź Razorprzycisk UIClassLib>OK.

Uruchom aplikację.

Testowanie aplikacji internetowej 1

Przejdź do witryny , aby /MyFeature/Page1 sprawdzić, czy biblioteka klas interfejsu Razor użytkownika 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 liście RCL, Razor pierwszeństwo ma znacznik (.cshtml plik) w aplikacji internetowej. Na przykład dodanie WebApp1/Areas/MyFeature/Pages/Page1.cshtml do usługi WebApp1 i Page1 w aplikacji WebApp1 będzie mieć pierwszeństwo przed stroną Page1 na liście RCL.

W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2 na , aby WebApp1/Areas/MyFeature 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 wersja aplikacji częściowej.

Układ stron listy 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, składniki widoku i modele danych mogą być wbudowane w bibliotekę Razor klas (RCL). Listę RCL można spakować i ponownie użyć. 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.

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 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 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 domyślnie służy do Razor tworzenia składników. Opcja Strony i widoki pomocy technicznej obsługuje strony i widoki.

Dodaj Razor pliki do listy RCL.

Szablony ASP.NET Core zakładają, że zawartość listy RCL znajduje się w folderze Areas . Zobacz układ stron listy RCL poniżej, aby utworzyć listę RCL, która uwidacznia zawartość ~/Pages zamiast ~/Areas/Pages.

Odwołanie do zawartości listy 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 usługi WebApp1 i Page1 w aplikacji WebApp1 będzie mieć pierwszeństwo przed stroną Page1 na liście RCL.

W przykładowym pobraniu zmień nazwę WebApp1/Areas/MyFeature2 na , aby WebApp1/Areas/MyFeature 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 wersja aplikacji częściowej.

Jeśli lista RCL używa Razor stron, włącz Razor usługi Pages i punkty końcowe w aplikacji hostingu:

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 listy 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>

_ViewStart.cshtml Dodaj plik do folderu projektu Pages listy RCL, aby użyć _Layout.cshtml pliku z aplikacji internetowej hosta:

@{
    Layout = "_Layout";
}

Tworzenie listy RCL ze statycznymi elementami zawartości

Lista RCL może wymagać towarzyszących zasobów statycznych, do których można odwoływać się przez listę RCL lub aplikację zużywającą listy 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 listy RCL wszystkie zasoby towarzyszące w wwwroot folderze są automatycznie dołączane do pakietu.

dotnet pack Użyj polecenia, a nie wersji NuGet.exe nuget pack.

Wykluczanie zasobów statycznych

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 element zawartości statycznej i nie jest uwzględniony w opublikowanej liście RCL:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Integracja z typescript

Aby dołączyć pliki TypeScript do listy RCL:

  1. Odwołanie 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. TypescriptOutDir Ustaw właściwość wewnątrz elementu 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 odwołania do listy RCL

Pliki zawarte w wwwroot folderze listy RCL są widoczne dla listy RCL lub aplikacji zużywanej pod prefiksem _content/{PACKAGE ID}/. Na przykład biblioteka o nazwie Razor.Class.Lib zestawu i bez <PackageId> określonej w pliku projektu powoduje ścieżkę do zawartości statycznej pod adresem _content/Razor.Class.Lib/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam 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ą <script>tagów HTML , <style>, <img>i . 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();

    ...
}

W przypadku uruchamiania aplikacji zużywanej 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 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 programowania obejmującego wiele projektów

Gdy aplikacja zużywana jest uruchamiana:

  • Zasoby na liście RCL pozostają w oryginalnych folderach. Zasoby nie są przenoszone do aplikacji zużywających.
  • 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 przywoływane projekty i pakiety są kopiowane do wwwroot folderu opublikowanej aplikacji w obszarze _content/{PACKAGE ID}/. Podczas tworzenia pakietu NuGet i nazwy zestawu nie jest taki sam jak identyfikator pakietu (<PackageId> w pliku projektu biblioteki) użyj identyfikatora pakietu określonego w pliku projektu, aby {PACKAGE ID} podczas badania wwwroot folderu dla opublikowanych zasobów.

Dodatkowe zasoby