ASP.NET Core'da gecikmeli yük derlemeleri Blazor WebAssembly
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Blazor WebAssemblyuygulama başlatma performansı, derlemeler gerekli olana kadar geliştirici tarafından oluşturulan uygulama derlemelerinin yüklenmesi beklenerek geliştirilebilir ve bu da gecikmeli yükleme olarak adlandırılır.
Bu makalenin ilk bölümleri uygulama yapılandırmasını kapsar. Çalışan bir tanıtım için bu makalenin sonundaki Tam örnek bölümüne bakın.
Bu makale yalnızca uygulamalar için Blazor WebAssembly geçerlidir. Sunucu tarafından işlenen uygulamalar derlemeleri istemciye indirmediğinden derlemenin gecikmeli yüklenmesi sunucu tarafı uygulamalarına fayda sağlamaz.
Yavaş yükleme, yayımlama sırasında kırpılan ve uygulama yüklendiğinde istemcide kullanılamayan çekirdek çalışma zamanı derlemeleri için kullanılmamalıdır.
Derleme dosyaları için dosya uzantısı yer tutucusu ({FILE EXTENSION}
)
Derleme dosyaları, dosya .wasm
uzantısına sahip .NET derlemeleri için Webcil paketleme biçimini kullanır.
Makale boyunca yer {FILE EXTENSION}
tutucu "wasm
" ifadesini temsil eder.
Derleme dosyaları, bir .dll
dosya uzantısına sahip Dinamik Bağlantı Kitaplıklarını (DLL' ler) temel alır.
Makale boyunca yer {FILE EXTENSION}
tutucu "dll
" ifadesini temsil eder.
Proje dosyası yapılandırması
Öğeyi kullanarak uygulamanın proje dosyasında (.csproj
) gecikmeli yükleme için derlemeleri BlazorWebAssemblyLazyLoad
işaretleyin. Dosya uzantısıyla derleme adını kullanın. Çerçeve, Blazor derlemenin uygulama başlatıldığında yüklenmesini engeller.
<ItemGroup>
<BlazorWebAssemblyLazyLoad Include="{ASSEMBLY NAME}.{FILE EXTENSION}" />
</ItemGroup>
Yer {ASSEMBLY NAME}
tutucu derlemenin adı, {FILE EXTENSION}
yer tutucu ise dosya uzantısıdır. Dosya uzantısı gereklidir.
Her derleme için bir BlazorWebAssemblyLazyLoad
öğe ekleyin. Bir derlemenin bağımlılıkları varsa, her bağımlılık için bir BlazorWebAssemblyLazyLoad
girdi ekleyin.
Router
bileşen yapılandırması
Çerçeve, Blazor istemci tarafı Blazor WebAssembly uygulamalarındaki LazyAssemblyLoaderyavaş yükleme derlemeleri için bir tekil hizmeti otomatik olarak kaydeder. LazyAssemblyLoader.LoadAssembliesAsync yöntemi:
- Derlemeleri bir ağ çağrısı aracılığıyla getirmek için birlikte çalışma kullanırJS.
- Derlemeleri tarayıcıda WebAssembly üzerinde yürütülen çalışma zamanına yükler.
Not
BarındırılanBlazor WebAssemblyçözümler için kılavuz, barındırılan Blazor WebAssembly çözüm bölümündeki Gecikmeli yük derlemeleri bölümünde ele alınmıştır.
Blazor'nin Router bileşeni yönlendirilebilir bileşenleri arayan Blazor derlemeleri ayarlar ve ayrıca kullanıcının gezindiği yol için bileşenin işlenmesinden sorumludur. Bileşenin Router OnNavigateAsync
yöntemi , kullanıcının istediği uç noktalar için doğru derlemeleri yüklemek üzere gecikmeli yükleme ile birlikte kullanılır.
ile LazyAssemblyLoaderyüklenecek derlemeleri belirlemek için içinde OnNavigateAsync mantık uygulanır. Mantığı yapılandırma seçenekleri şunlardır:
- Yönteminin OnNavigateAsync içinde koşullu denetimler.
- Yolları bileşene eklenen veya blok içinde
@code
uygulanan derleme adlarına eşleyen bir arama tablosu.
Aşağıdaki örnekte:
- için Microsoft.AspNetCore.Components.WebAssembly.Services ad alanı belirtilir.
- Hizmet LazyAssemblyLoader eklenir (
AssemblyLoader
). - Yer
{PATH}
tutucu, derleme listesinin yüklenmesi gereken yoldur. Örnek, tek bir derleme kümesini yükleyen tek bir yol için koşullu denetim kullanır. - Yer
{LIST OF ASSEMBLIES}
tutucu, dosya uzantıları da dahil olmak üzere derleme dosya adı dizelerinin virgülle ayrılmış listesidir (örneğin,"Assembly1.{FILE EXTENSION}", "Assembly2.{FILE EXTENSION}"
).
App.razor
:
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.WebAssembly.Services
@using Microsoft.Extensions.Logging
@inject LazyAssemblyLoader AssemblyLoader
@inject ILogger<App> Logger
<Router AppAssembly="typeof(App).Assembly"
OnNavigateAsync="OnNavigateAsync">
...
</Router>
@code {
private async Task OnNavigateAsync(NavigationContext args)
{
try
{
if (args.Path == "{PATH}")
{
var assemblies = await AssemblyLoader.LoadAssembliesAsync(
new[] { {LIST OF ASSEMBLIES} });
}
}
catch (Exception ex)
{
Logger.LogError("Error: {Message}", ex.Message);
}
}
}
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.WebAssembly.Services
@using Microsoft.Extensions.Logging
@inject LazyAssemblyLoader AssemblyLoader
@inject ILogger<App> Logger
<Router AppAssembly="typeof(Program).Assembly"
OnNavigateAsync="OnNavigateAsync">
...
</Router>
@code {
private async Task OnNavigateAsync(NavigationContext args)
{
try
{
if (args.Path == "{PATH}")
{
var assemblies = await AssemblyLoader.LoadAssembliesAsync(
new[] { {LIST OF ASSEMBLIES} });
}
}
catch (Exception ex)
{
Logger.LogError("Error: {Message}", ex.Message);
}
}
}
Not
Yukarıdaki örnekte bileşenin Razor işaretlemesinin Router (...
) içeriği gösterilmiyor. Kodun tamamını içeren bir tanıtım için bu makalenin Tam örnek bölümüne bakın.
Not
ASP.NET Core 5.0.1 sürümünün yayınlanmasıyla ve diğer 5. x sürümleri için Router
bileşeni, @true
olarak ayarlanan PreferExactMatches
parametresini içerir. Daha fazla bilgi için, bkz. ASP.NET Core 3.1'den 5.0'a geçiş.
Yönlendirilebilir bileşenler içeren derlemeler
Derlemeler listesi yönlendirilebilir bileşenler içerdiğinde, belirli bir yolun derleme listesi bileşenin AdditionalAssemblies koleksiyonuna Router geçirilir.
Aşağıdaki örnekte:
- içindeki
lazyLoadedAssemblies
Liste><Assembly, derleme listesini öğesine AdditionalAssembliesgeçirir. Çerçeve, derlemelerde yollar arar ve yeni yollar bulunursa yol koleksiyonunu güncelleştirir. Türüne Assembly erişmek için, ad System.Reflection alanı dosyanın en üstüneApp.razor
eklenir. - Yer
{PATH}
tutucu, derleme listesinin yüklenmesi gereken yoldur. Örnek, tek bir derleme kümesini yükleyen tek bir yol için koşullu denetim kullanır. - Yer
{LIST OF ASSEMBLIES}
tutucu, dosya uzantıları da dahil olmak üzere derleme dosya adı dizelerinin virgülle ayrılmış listesidir (örneğin,"Assembly1.{FILE EXTENSION}", "Assembly2.{FILE EXTENSION}"
).
App.razor
:
@using System.Reflection
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.WebAssembly.Services
@using Microsoft.Extensions.Logging
@inject ILogger<App> Logger
@inject LazyAssemblyLoader AssemblyLoader
<Router AppAssembly="typeof(App).Assembly"
AdditionalAssemblies="lazyLoadedAssemblies"
OnNavigateAsync="OnNavigateAsync">
...
</Router>
@code {
private List<Assembly> lazyLoadedAssemblies = new();
private async Task OnNavigateAsync(NavigationContext args)
{
try
{
if (args.Path == "{PATH}")
{
var assemblies = await AssemblyLoader.LoadAssembliesAsync(
new[] { {LIST OF ASSEMBLIES} });
lazyLoadedAssemblies.AddRange(assemblies);
}
}
catch (Exception ex)
{
Logger.LogError("Error: {Message}", ex.Message);
}
}
}
@using System.Reflection
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.WebAssembly.Services
@using Microsoft.Extensions.Logging
@inject ILogger<App> Logger
@inject LazyAssemblyLoader AssemblyLoader
<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="lazyLoadedAssemblies"
OnNavigateAsync="OnNavigateAsync">
...
</Router>
@code {
private List<Assembly> lazyLoadedAssemblies = new List<Assembly>();
private async Task OnNavigateAsync(NavigationContext args)
{
try
{
if (args.Path == "{PATH}")
{
var assemblies = await AssemblyLoader.LoadAssembliesAsync(
new[] { {LIST OF ASSEMBLIES} });
lazyLoadedAssemblies.AddRange(assemblies);
}
}
catch (Exception ex)
{
Logger.LogError("Error: {Message}", ex.Message);
}
}
}
Not
Yukarıdaki örnekte bileşenin Razor işaretlemesinin Router (...
) içeriği gösterilmiyor. Kodun tamamını içeren bir tanıtım için bu makalenin Tam örnek bölümüne bakın.
Not
ASP.NET Core 5.0.1 sürümünün yayınlanmasıyla ve diğer 5. x sürümleri için Router
bileşeni, @true
olarak ayarlanan PreferExactMatches
parametresini içerir. Daha fazla bilgi için, bkz. ASP.NET Core 3.1'den 5.0'a geçiş.
Daha fazla bilgi için bkz . ASP.NET Temel Blazor yönlendirme ve gezinti.
İçerikle <Navigating>
kullanıcı etkileşimi
Birkaç saniye sürebilen derlemeler yüklenirken, Router bileşen kullanıcıya yönlendiricinin Navigating özelliğiyle bir sayfa geçişi gerçekleştiğini gösterebilir.
Daha fazla bilgi için bkz . ASP.NET Temel Blazor yönlendirme ve gezinti.
uygulamasındaki iptalleri işleme OnNavigateAsync
NavigationContext Geri çağırmaya OnNavigateAsync geçirilen nesne, yeni bir CancellationToken gezinti olayı gerçekleştiğinde ayarlanan bir içerir. Geri OnNavigateAsync çağırmayı güncel olmayan bir gezintide çalıştırmaya devam etmekten kaçınmak için iptal belirteci ayarlandığında geri çağırmanın OnNavigateAsync atılması gerekir.
Daha fazla bilgi için bkz . ASP.NET Temel Blazor yönlendirme ve gezinti.
OnNavigateAsync
olaylar ve yeniden adlandırılmış derleme dosyaları
Kaynak yükleyici, dosyada blazor.boot.json
tanımlanan derleme adlarına dayanır. Derlemeler yeniden adlandırılırsa, geri OnNavigateAsync çağırmada kullanılan derleme adları ve dosyadaki blazor.boot.json
derleme adları eşitlenmemiş olur.
Bunu düzeltmek için:
- Hangi derleme adlarının kullanılacağını belirlerken uygulamanın ortamda çalışıp çalışmadığını
Production
denetleyin. - Yeniden adlandırılan derleme adlarını ayrı bir dosyada depolayın ve hizmet OnNavigateAsync ve geri çağırma ile LazyAssemblyLoader hangi derleme adının kullanılacağını belirlemek için bu dosyadan okuyun.
Barındırılan Blazor WebAssembly çözümde gecikmeli yük derlemeleri
Çerçevenin gecikmeli yükleme uygulaması, barındırılan Blazor WebAssemblybir çözümde önyükleme ile gecikmeli yüklemeyi destekler. Prerendering sırasında, gecikmeli yükleme için işaretlenenler de dahil olmak üzere tüm derlemelerin yüklendiği varsayılır. Hizmeti Server projeye el ile kaydedinLazyAssemblyLoader.
Projenin dosyasının Program.cs
Server en üstüne için Microsoft.AspNetCore.Components.WebAssembly.Servicesad alanını ekleyin:
using Microsoft.AspNetCore.Components.WebAssembly.Services;
Program.cs
Projede Server hizmeti kaydedin:
builder.Services.AddScoped<LazyAssemblyLoader>();
Projenin dosyasının Startup.cs
Server en üstüne için Microsoft.AspNetCore.Components.WebAssembly.Servicesad alanını ekleyin:
using Microsoft.AspNetCore.Components.WebAssembly.Services;
Startup.ConfigureServices
Projenin (Startup.cs
) içinde Server hizmeti kaydedin:
services.AddScoped<LazyAssemblyLoader>();
Tam örnek
Bu bölümdeki tanıtım:
- Bir bileşen içeren
Robot
bir Razor sınıf kitaplığı (RCL) olarak bir robot denetimleri derlemesi (GrantImaharaRobotControls.{FILE EXTENSION}
) oluşturur (Robot.razor
bir rota şablonu/robot
ile). - Kullanıcı TARAFıNDAN URL istendiğinde
/robot
bileşenini işlemek için RCL'nin derlemesiniRobot
lazily yükler.
Sınıf kitaplığının derlemesinin yavaş yüklenmesini göstermek için tek başına Blazor WebAssembly bir Razor uygulama oluşturun. Projeyi LazyLoadTest
olarak adlandırın.
Çözüme bir ASP.NET Core sınıf kitaplığı projesi ekleyin:
- Visual Studio: Çözüm Gezgini çözüm dosyasına sağ tıklayın ve Yeni Proje Ekle'yi> seçin. Yeni proje türleri iletişim kutusunda Sınıf Kitaplığı'nı seçinRazor. Projeyi
GrantImaharaRobotControls
olarak adlandırın. Destek sayfaları ve görünüm onay kutusunu seçmeyin. - Visual Studio Code/.NET CLI: Komut isteminden yürütür
dotnet new razorclasslib -o GrantImaharaRobotControls
. seçeneği-o|--output
bir klasör oluşturur ve projeyiGrantImaharaRobotControls
olarak adlandırmaktadır.
Bu bölümün ilerleyen bölümlerinde sunulan örnek bileşen bir Blazor form kullanır. RCL projesinde paketi projeye ekleyin Microsoft.AspNetCore.Components.Forms
.
Not
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
RCL'de bir HandGesture
robota başparmak hareketi yapan varsayımsal bir yöntemle ThumbUp
bir sınıf oluşturun. yöntemi, eksen Left
Right
veya için bir bağımsız değişkeni olarak enum
kabul eder. yöntemi başarılı olduğunda döndürür true
.
HandGesture.cs
:
using Microsoft.Extensions.Logging;
namespace GrantImaharaRobotControls;
public static class HandGesture
{
public static bool ThumbUp(Axis axis, ILogger logger)
{
logger.LogInformation("Thumb up gesture. Axis: {Axis}", axis);
// Code to make robot perform gesture
return true;
}
}
public enum Axis { Left, Right }
using Microsoft.Extensions.Logging;
namespace GrantImaharaRobotControls
{
public static class HandGesture
{
public static bool ThumbUp(Axis axis, ILogger logger)
{
logger.LogInformation("Thumb up gesture. Axis: {Axis}", axis);
// Code to make robot perform gesture
return true;
}
}
public enum Axis { Left, Right }
}
Aşağıdaki bileşeni RCL projesinin köküne ekleyin. Bileşen, kullanıcının bir sol veya sağ el başparmak yukarı hareket isteği göndermesine izin verir.
Robot.razor
:
@page "/robot"
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.Extensions.Logging
@inject ILogger<Robot> Logger
<h1>Robot</h1>
<EditForm FormName="RobotForm" Model="robotModel" OnValidSubmit="HandleValidSubmit">
<InputRadioGroup @bind-Value="robotModel.AxisSelection">
@foreach (var entry in Enum.GetValues<Axis>())
{
<InputRadio Value="entry" />
<text> </text>@entry<br>
}
</InputRadioGroup>
<button type="submit">Submit</button>
</EditForm>
<p>
@message
</p>
@code {
private RobotModel robotModel = new() { AxisSelection = Axis.Left };
private string? message;
private void HandleValidSubmit()
{
Logger.LogInformation("HandleValidSubmit called");
var result = HandGesture.ThumbUp(robotModel.AxisSelection, Logger);
message = $"ThumbUp returned {result} at {DateTime.Now}.";
}
public class RobotModel
{
public Axis AxisSelection { get; set; }
}
}
@page "/robot"
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.Extensions.Logging
@inject ILogger<Robot> Logger
<h1>Robot</h1>
<EditForm Model="robotModel" OnValidSubmit="HandleValidSubmit">
<InputRadioGroup @bind-Value="robotModel.AxisSelection">
@foreach (var entry in Enum.GetValues<Axis>())
{
<InputRadio Value="entry" />
<text> </text>@entry<br>
}
</InputRadioGroup>
<button type="submit">Submit</button>
</EditForm>
<p>
@message
</p>
@code {
private RobotModel robotModel = new() { AxisSelection = Axis.Left };
private string? message;
private void HandleValidSubmit()
{
Logger.LogInformation("HandleValidSubmit called");
var result = HandGesture.ThumbUp(robotModel.AxisSelection, Logger);
message = $"ThumbUp returned {result} at {DateTime.Now}.";
}
public class RobotModel
{
public Axis AxisSelection { get; set; }
}
}
@page "/robot"
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.Extensions.Logging
@inject ILogger<Robot> Logger
<h1>Robot</h1>
<EditForm Model="robotModel" OnValidSubmit="HandleValidSubmit">
<InputRadioGroup @bind-Value="robotModel.AxisSelection">
@foreach (var entry in (Axis[])Enum
.GetValues(typeof(Axis)))
{
<InputRadio Value="entry" />
<text> </text>@entry<br>
}
</InputRadioGroup>
<button type="submit">Submit</button>
</EditForm>
<p>
@message
</p>
@code {
private RobotModel robotModel = new RobotModel() { AxisSelection = Axis.Left };
private string message;
private void HandleValidSubmit()
{
Logger.LogInformation("HandleValidSubmit called");
var result = HandGesture.ThumbUp(robotModel.AxisSelection, Logger);
message = $"ThumbUp returned {result} at {DateTime.Now}.";
}
public class RobotModel
{
public Axis AxisSelection { get; set; }
}
}
Projede LazyLoadTest
RCL için GrantImaharaRobotControls
bir proje başvurusu oluşturun:
- Visual Studio: Projeye sağ tıklayın
LazyLoadTest
ve Proje Başvurusu Ekle'yi>seçerek RCL içinGrantImaharaRobotControls
bir proje başvurusu ekleyin. - Visual Studio Code/.NET CLI: Projenin klasöründen bir komut kabuğunda yürütür
dotnet add reference {PATH}
. Yer{PATH}
tutucu, RCL projesinin yoludur.
Uygulamanın proje dosyasında gecikmeli yükleme için RCL'nin derlemesini LazyLoadTest
belirtin (.csproj
):
<ItemGroup>
<BlazorWebAssemblyLazyLoad Include="GrantImaharaRobotControls.{FILE EXTENSION}" />
</ItemGroup>
Aşağıdaki Router bileşen, kullanıcı adresine gittiği zaman derlemenin GrantImaharaRobotControls.{FILE EXTENSION}
yüklenmesini /robot
gösterir. Uygulamanın varsayılan App
bileşenini aşağıdaki App
bileşenle değiştirin.
Sayfa geçişleri sırasında, kullanıcıya öğesiyle <Navigating>
stilli bir ileti görüntülenir. Daha fazla bilgi için İçerikle <Navigating>
kullanıcı etkileşimi bölümüne bakın.
Derleme öğesine AdditionalAssembliesatanır ve bu da yönlendiricinin bileşeni bulduğu yönlendirilebilir bileşenler için derlemeyi aramasına Robot
neden olur. Bileşenin Robot
yolu, uygulamanın yol koleksiyonuna eklenir. Daha fazla bilgi için bu makalenin ASP.NET Temel Blazor yönlendirme ve gezinti makalesine ve yönlendirilebilir bileşenler içeren derlemeler bölümüne bakın.
App.razor
:
@using System.Reflection
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.WebAssembly.Services
@using Microsoft.Extensions.Logging
@inject ILogger<App> Logger
@inject LazyAssemblyLoader AssemblyLoader
<Router AppAssembly="typeof(App).Assembly"
AdditionalAssemblies="lazyLoadedAssemblies"
OnNavigateAsync="OnNavigateAsync">
<Navigating>
<div style="padding:20px;background-color:blue;color:white">
<p>Loading the requested page…</p>
</div>
</Navigating>
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
@code {
private List<Assembly> lazyLoadedAssemblies = new();
private async Task OnNavigateAsync(NavigationContext args)
{
try
{
if (args.Path == "robot")
{
var assemblies = await AssemblyLoader.LoadAssembliesAsync(
new[] { "GrantImaharaRobotControls.{FILE EXTENSION}" });
lazyLoadedAssemblies.AddRange(assemblies);
}
}
catch (Exception ex)
{
Logger.LogError("Error: {Message}", ex.Message);
}
}
}
@using System.Reflection
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.WebAssembly.Services
@using Microsoft.Extensions.Logging
@inject ILogger<App> Logger
@inject LazyAssemblyLoader AssemblyLoader
<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="lazyLoadedAssemblies"
OnNavigateAsync="OnNavigateAsync">
<Navigating>
<div style="padding:20px;background-color:blue;color:white">
<p>Loading the requested page…</p>
</div>
</Navigating>
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
@code {
private List<Assembly> lazyLoadedAssemblies = new List<Assembly>();
private async Task OnNavigateAsync(NavigationContext args)
{
try
{
if (args.Path == "robot")
{
var assemblies = await AssemblyLoader.LoadAssembliesAsync(
new[] { "GrantImaharaRobotControls.{FILE EXTENSION}" });
lazyLoadedAssemblies.AddRange(assemblies);
}
}
catch (Exception ex)
{
Logger.LogError("Error: {Message}", ex.Message);
}
}
}
Uygulamayı derleyin ve çalıştırın.
Robot
RCL'den bileşen adresinden istendiğinde/robot
GrantImaharaRobotControls.{FILE EXTENSION}
, derleme yüklenir ve Robot
bileşen işlenir. Derleme yüklemesini tarayıcının geliştirici araçlarının Ağ sekmesinde inceleyebilirsiniz.
Sorun giderme
- Önceki gezintiden bir bileşeni işleme gibi beklenmeyen işlemeler oluşursa, iptal belirteci ayarlanırsa kodun atıldığını onaylayın.
- Uygulama başlangıcında gecikmeli yükleme için yapılandırılmış derlemeler beklenmedik şekilde yüklenirse, derlemenin proje dosyasında gecikmeli yükleme için işaretlenip işaretlenmediğini denetleyin.
Not
Lazily yüklü bir derlemeden yükleme türleri için bilinen bir sorun var. Daha fazla bilgi için bkz. Blazor WebAssembly lazy loading assemblies not working when using @ref attribute in the component (dotnet/aspnetcore #29342).
Ek kaynaklar
ASP.NET Core