Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
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 aplikace do WebAssembly (AOT) a opětovnému Blazor.
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 MSBuild je naplánována per Document blazor msbuild konfigurační možnosti (dotnet/docs #27395).
Použití nativního kódu
Tato část ukazuje, jak do aplikace přidat jednoduchou nativní funkci jazyka Blazor WebAssembly C.
Vytvořte nový Blazor WebAssembly projekt.
Test.c Přidejte do projektu soubor s funkcí jazyka C pro výpočetní faktoriály.
Test.c:
int fact(int n)
{
if (n == 0) return 1;
return n * fact(n - 1);
}
NativeFileReference Přidejte položku MSBuild do Test.c souboru projektu aplikace (.csproj):
<ItemGroup>
<NativeFileReference Include="Test.c" />
</ItemGroup>
V komponentě Razor přidejte [DllImport] atribut pro fact funkci 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++
Označte spravované metody, které jsou předávány do C++ pomocí atributu [UnmanagedCallersOnly]. Metoda označená atributem 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á atributem[DllImport] musí místo typu delegáta pro argument zpětného volání použít ukazatel funkce (C# 9 nebo novější).
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 rozhraní .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.
Tato část ukazuje, jak implementovat SkiaSharp v Blazor WebAssembly aplikaci.
Přidejte odkaz na SkiaSharp.Views.Blazor balíček v Blazor WebAssembly projektu. Pomocí procesu Visual Studio můžete do aplikace přidat balíčky prostřednictvím funkce Spravovat balíčky NuGet s vybranou možností Zahrnout předběžné verze, nebo spustit příkaz dotnet add package v příkazovém prostředí s možností --prerelease.
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.
Přidejte do aplikace komponentu SKCanvasView následujícím kódem:
-
SkiaSharpaSkiaSharp.Views.Blazorobory 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);
}
}
Sestavte aplikaci, která může trvat několik minut. Spusťte aplikaci a přejděte na komponentu NativeDependencyExample na adrese /native-dependency-example.