ASP.NET Podstawowe Blazor WebAssembly zależności natywne

Uwaga

Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.

Ważne

Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.

Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.

Blazor WebAssembly aplikacje mogą używać natywnych zależności utworzonych do uruchamiania w zestawie WebAssembly. Statyczne łączenie zależności natywnych ze środowiskiem uruchomieniowym zestawu WebAssembly platformy .NET przy użyciu narzędzi kompilacji zestawu webAssembly platformy .NET, tych samych narzędzi używanych do przedterminowego kompilowania Blazor aplikacji do zestawu WebAssembly i ponownego połączenia środowiska uruchomieniowego w celu usunięcia nieużywanych funkcji.

Ten artykuł dotyczy tylko .Blazor WebAssembly

Narzędzia kompilacji zestawu WebAssembly platformy .NET

Narzędzia kompilacji zestawu WebAssembly platformy .NET są oparte na Emscripten, łańcuchu narzędzi kompilatora dla platformy internetowej. Aby uzyskać więcej informacji na temat narzędzi kompilacji, w tym instalacji, zobacz ASP.NET Core Blazor WebAssembly build tools and ahead-of-time (AOT) build tools and ahead-of-time build (AOT) build tools (Przedterminowa kompilacja).

Dodaj zależności natywne do Blazor WebAssembly aplikacji, dodając NativeFileReference elementy w pliku projektu aplikacji. Po skompilowaniu projektu każda NativeFileReference z nich jest przekazywana do programu Emscripten przez narzędzia kompilacji zestawu webAssembly platformy .NET, aby były kompilowane i połączone ze środowiskiem uruchomieniowym. p/invoke Następnie przejdź do kodu natywnego z kodu platformy .NET aplikacji.

Ogólnie rzecz biorąc, każdy przenośny kod macierzysty może służyć jako natywna zależność z Blazor WebAssembly. Możesz dodać natywne zależności do kodu lub kodu C++, który został wcześniej skompilowany przy użyciu programu Emscripten:

  • Pliki obiektów (.o)
  • Pliki archiwum (.a)
  • Kod bitowy (.bc)
  • Autonomiczne moduły WebAssembly (.wasm)

Wstępnie utworzone zależności zwykle muszą być kompilowane przy użyciu tej samej wersji programu Emscripten używanej do kompilowania środowiska uruchomieniowego zestawu WebAssembly platformy .NET.

Uwaga

Aby uzyskać informacje o właściwościach i obiektach docelowych programu Mono/WebAssembly MSBuild, zobacz WasmApp.targets (dotnet/runtime repozytorium GitHub). Oficjalna dokumentacja typowych właściwości programu MSBuild jest planowana dla opcji konfiguracji programu Document blazor msbuild (dotnet/docs #27395).

Korzystanie z kodu natywnego

Dodaj prostą natywną funkcję języka C do Blazor WebAssembly aplikacji:

  1. Utwórz nowy Blazor WebAssembly projekt.

  2. Test.c Dodaj plik do projektu.

  3. Dodaj funkcję języka C do obliczeń współczynnikowych.

    Test.c:

    int fact(int n)
    {
        if (n == 0) return 1;
        return n * fact(n - 1);
    }
    
  4. Dodaj element NativeFileReference for Test.c w pliku projektu aplikacji:

    <ItemGroup>
      <NativeFileReference Include="Test.c" />
    </ItemGroup>
    
  5. W składniku Razor dodaj element DllImportAttribute dla fact funkcji w wygenerowanej Test bibliotece i wywołaj fact metodę z kodu platformy .NET w składniku.

    Pages/NativeCTest.razor:

    @page "/native-c-test"
    @using System.Runtime.InteropServices
    
    <PageTitle>Native C</PageTitle>
    
    <h1>Native C Test</h1>
    
    <p>
        @@fact(3) result: @fact(3)
    </p>
    
    @code {
        [DllImport("Test")]
        static extern int fact(int n);
    }
    

Podczas kompilowania aplikacji przy użyciu zainstalowanych narzędzi kompilacji zestawu webAssembly platformy .NET kod natywnego języka C jest kompilowany i połączony ze środowiskiem uruchomieniowym .NET WebAssembly (dotnet.wasm). Po skompiluj aplikację, uruchom aplikację, aby wyświetlić renderowaną wartość współczynnikową.

Wywołania zwrotne metod zarządzanych w języku C++

Metody zarządzane etykiet, które są przekazywane do języka C++ za pomocą atrybutu [UnmanagedCallersOnly] .

Metoda oznaczona atrybutem [UnmanagedCallersOnly] musi mieć wartość static. Aby wywołać metodę wystąpienia w składniku Razor , przekaż GCHandle element dla wystąpienia do języka C++, a następnie przekaż go z powrotem do macierzysty. Alternatywnie użyj innej metody, aby zidentyfikować wystąpienie składnika.

Metoda oznaczona [DllImport] za pomocą polecenia musi używać wskaźnika funkcji C# 9.0, a nie typu delegata dla argumentu wywołania zwrotnego.

Uwaga

W przypadku typów wskaźników funkcji języka C# w [DllImport] metodach należy użyć IntPtr w podpisie metody po stronie zarządzanej zamiast delegate *unmanaged<int, void>. Aby uzyskać więcej informacji, zobacz wywołanie zwrotne [WASM] z kodu natywnego do platformy .NET: analizowanie typów wskaźników funkcji w podpisach nie jest obsługiwane (dotnet/runtime #56145).

Tworzenie pakietów natywnych zależności w pakiecie NuGet

Pakiety NuGet mogą zawierać natywne zależności do użycia w zestawie WebAssembly. Te biblioteki i ich natywne funkcje są następnie dostępne dla dowolnej Blazor WebAssembly aplikacji. Pliki dla zależności natywnych powinny być tworzone dla zestawu WebAssembly i spakowane w browser-wasmfolderze specyficznym dla architektury. Zależności specyficzne dla zestawu WebAssembly nie są automatycznie przywołyne i muszą być przywołyne ręcznie jako NativeFileReferences. Autorzy pakietów mogą dodać odwołania natywne, dołączając .props plik do pakietu z odwołaniami.

Przykładowa biblioteka SkiaSharp używa

SkiaSharp to wieloplatformowa biblioteka grafiki 2D dla platformy .NET oparta na natywnej bibliotece grafiki Skia z obsługą programu Blazor WebAssembly.

Aby użyć biblioteki SkiaSharp w Blazor WebAssembly aplikacji:

  1. Dodaj odwołanie do SkiaSharp.Views.Blazor pakietu w projekcie Blazor WebAssembly . Użyj procesu programu Visual Studio do dodawania pakietów do aplikacji (zarządzaj pakietami NuGet z wybraną wersją wstępną Dołącz) lub wykonaj dotnet add package polecenie w powłoce poleceń:

    dotnet add package –-prerelease SkiaSharp.Views.Blazor
    

    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. SKCanvasView Dodaj składnik do aplikacji, wykonując następujące czynności:

    • SkiaSharp i SkiaSharp.Views.Blazor przestrzenie nazw.
    • Logika do rysowania w składniku Widok kanwy SkiaSharp (SKCanvasView).

    Pages/NativeDependencyExample.razor:

    @page "/native-dependency-example"
    @using SkiaSharp
    @using SkiaSharp.Views.Blazor
    
    <PageTitle>Native dependency</PageTitle>
    
    <h1>Native dependency example with SkiaSharp</h1>
    
    <SKCanvasView OnPaintSurface="OnPaintSurface" />
    
    @code {
        private void OnPaintSurface(SKPaintSurfaceEventArgs e)
        {
            var canvas = e.Surface.Canvas;
    
            canvas.Clear(SKColors.White);
    
            using var paint = new SKPaint
            {
                Color = SKColors.Black,
                IsAntialias = true,
                TextSize = 24
            };
    
            canvas.DrawText("SkiaSharp", 0, 24, paint);
        }
    }
    
  3. Skompiluj aplikację, która może potrwać kilka minut. Uruchom aplikację i przejdź do NativeDependencyExample składnika pod adresem /native-dependency-example.

Dodatkowe zasoby

Narzędzia kompilacji zestawu WebAssembly platformy .NET