Sdílet prostřednictvím


nativní závislosti ASP.NET Core Blazor WebAssembly

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Blazor WebAssembly Aplikace můžou používat nativní závislosti vytvořené ke spuštění na WebAssembly. Nativní závislosti můžete staticky propojit do modulu runtime .NET WebAssembly pomocí nástrojů sestavení .NET WebAssembly, stejných nástrojů, které se používají ke kompilaci Blazor aplikace do WebAssembly (AOT) a opětovnému propojení modulu runtime, aby se odebraly nepoužívané funkce.

Tento článek se týká Blazor WebAssemblypouze .

Nástroje pro sestavení .NET WebAssembly

Nástroje pro sestavení .NET WebAssembly jsou založené na Emscriptenu, sadě nástrojů kompilátoru pro webovou platformu. Další informace o nástrojích sestavení, včetně instalace, najdete v tématu ASP.NET Nástroje sestavení Core Blazor WebAssembly a kompilace před časem (AOT).

Přidejte do Blazor WebAssembly aplikace nativní závislosti přidáním NativeFileReference položek do souboru projektu aplikace. Při sestavení projektu se každý NativeFileReference předá Emscripten pomocí nástrojů sestavení .NET WebAssembly tak, aby byly zkompilovány a propojeny do modulu runtime. p/invoke Dále do nativního kódu z kódu .NET aplikace.

Obecně platí, že jakýkoli přenosný nativní kód lze použít jako nativní závislost s Blazor WebAssembly. Nativní závislosti můžete přidat do kódu C/C++ nebo kódu dříve zkompilovaného pomocí Emscripten:

  • Soubory objektů (.o)
  • Archivní soubory (.a)
  • Bitcode (.bc)
  • Samostatné moduly WebAssembly (.wasm)

Předem připravené závislosti musí být obvykle sestaveny pomocí stejné verze Emscripten, která se používá k sestavení modulu runtime .NET WebAssembly.

Poznámka:

Informace o vlastnostech a cílech nástroje Mono/WebAssembly MSBuild najdete v tématu WasmApp.targets (dotnet/runtime úložiště GitHub). Oficiální dokumentace pro běžné vlastnosti NÁSTROJE MSBuild se plánuje pro jednotlivé možnosti konfigurace nástroje Document blazor msbuild (dotnet/docs #27395).

Použití nativního kódu

Přidejte do aplikace jednoduchou nativní funkci jazyka Blazor WebAssembly C:

  1. Vytvořte nový Blazor WebAssembly projekt.

  2. Test.c Přidejte do projektu soubor.

  3. Přidání funkce jazyka C pro výpočetní faktoriály

    Test.c:

    int fact(int n)
    {
        if (n == 0) return 1;
        return n * fact(n - 1);
    }
    
  4. NativeFileReference Přidejte do souboru projektu aplikace forTest.c:

    <ItemGroup>
      <NativeFileReference Include="Test.c" />
    </ItemGroup>
    
  5. V komponentě Razor přidejte DllImportAttribute funkci fact ve vygenerované Test knihovně a volejte metodu fact z kódu .NET v komponentě.

    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);
    }
    

Když sestavíte aplikaci s nainstalovanými nástroji sestavení .NET WebAssembly, nativní kód jazyka C se zkompiluje a propojil do modulu runtime .NET WebAssembly (dotnet.wasm). Po sestavení aplikace spusťte aplikaci a zobrazte vykreslenou faktoriální hodnotu.

Zpětná volání spravovaných metod jazyka C++

Popisek spravovaných metod, které jsou předány c++ atributu [UnmanagedCallersOnly] .

Metoda označená atributem [UnmanagedCallersOnly] musí být static. Chcete-li volat metodu instance v komponentě Razor , předejte GCHandle instanci do jazyka C++ a pak ji předejte zpět do nativního. Případně můžete použít jinou metodu k identifikaci instance komponenty.

Metoda označená [DllImport] pomocí jazyka C# 9.0 musí místo typu delegáta pro argument zpětného volání použít ukazatel funkce C# 9.0.

Poznámka:

U typů ukazatelů funkce jazyka C# v [DllImport] metodách použijte IntPtr podpis metody na spravované straně místo delegate *unmanaged<int, void>. Další informace najdete v tématu Zpětné volání [WASM] z nativního kódu do .NET: Analýza typů ukazatelů funkce v podpisech není podporována (dotnet/runtime #56145).<

Zabalení nativních závislostí v balíčku NuGet

Balíčky NuGet mohou obsahovat nativní závislosti pro použití na WebAssembly. Tyto knihovny a jejich nativní funkce jsou pak dostupné pro libovolnou Blazor WebAssembly aplikaci. Soubory nativních závislostí by měly být vytvořeny pro WebAssembly a zabaleny do složky specifické pro architekturu.browser-wasm Na závislosti specifické pro WebAssembly se neodkazuje automaticky a musí být odkazovány ručně jako NativeFileReferences. Autoři balíčků se můžou rozhodnout přidat nativní odkazy zahrnutím .props souboru do balíčku s odkazy.

Ukázková knihovna SkiaSharp

SkiaSharp je multiplatformní 2D grafická knihovna pro .NET založená na nativní grafické knihovně Skia s podporou Blazor WebAssembly.

Použití SkiaSharpu v Blazor WebAssembly aplikaci:

  1. Přidejte odkaz na SkiaSharp.Views.Blazor balíček v Blazor WebAssembly projektu. Pomocí procesu sady Visual Studio můžete do aplikace přidat balíčky (spravovat balíčky NuGet s vybranou předběžnou správou balíčků NuGet) nebo spustit dotnet add package příkaz v příkazovém prostředí:

    dotnet add package –-prerelease SkiaSharp.Views.Blazor
    

    Poznámka:

    Pokyny k přidávání balíčků do aplikací .NET najdete v článcích v části Instalace a správa balíčků na webu Pracovní postup používání balíčků (dokumentace k NuGetu). Ověřte správné verze balíčků na NuGet.org.

  2. Přidejte do aplikace komponentu SKCanvasView následujícím kódem:

    • SkiaSharp a SkiaSharp.Views.Blazor obory názvů.
    • Logika pro kreslení v komponentě SkiaSharp Canvas View (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. Sestavte aplikaci, která může trvat několik minut. Spusťte aplikaci a přejděte na komponentu NativeDependencyExample na adrese /native-dependency-example.

Další materiály

Nástroje pro sestavení .NET WebAssembly