ASP.NET Core'da gecikmeli yük derlemeleri Blazor WebAssembly

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

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 RouterOnNavigateAsync 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üne App.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.csServer 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.csServer 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:

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 LazyLoadTestolarak 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 GrantImaharaRobotControlsolarak 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 projeyi GrantImaharaRobotControlsolarak 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 LeftRightveya için bir bağımsız değişkeni olarak enumkabul 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>&nbsp;</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>&nbsp;</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>&nbsp;</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çin GrantImaharaRobotControls 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 /robotgö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&hellip;</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&hellip;</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/robotGrantImaharaRobotControls.{FILE EXTENSION}, derleme yüklenir ve Robot bileşen işlenir. Derleme yüklemesini tarayıcının geliştirici araçlarının 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