Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Blazor WebAssembly az alkalmazások a WebAssemblyen való futtatáshoz létrehozott natív függőségeket használhatják. A .NET WebAssembly Build eszközeivel statikusan csatolhatja a natív függőségeket a .NET WebAssembly futtatókörnyezethez, ugyanazokkal az eszközökkel, amelyeket az alkalmazás idő előtti (AOT) fordításához WebAssembly-be és a futtatókörnyezet újrakapcsolásához használnak a nem használt funkciók eltávolítására.
Ez a cikk csak azokra Blazor WebAssemblyvonatkozik.
.NET WebAssembly buildelési eszközök
A .NET WebAssembly buildelési eszközei Emscripten, a webes platform fordítóeszközláncán alapulnak. További információ a build eszközökről, beleértve a telepítést is, lásd: ASP.NET Core Blazor WebAssembly build eszközök és előzetes (AOT) fordítás.
Natív függőségek hozzáadása az Blazor WebAssembly alkalmazáshoz az alkalmazás projektfájljában lévő elemek hozzáadásával NativeFileReference . Amikor a projekt létrejön, a .NET WebAssembly építőeszközök minden egyes NativeFileReference-t átadnak az Emscriptennek, hogy lefordítsák és a futtatókörnyezethez kapcsolják őket.
p/invoke Ezután lépjen be az alkalmazás .NET-kódjából származó natív kódba.
Általában bármilyen hordozható natív kód használható natív függőségként Blazor WebAssembly. Natív függőségeket adhat hozzá az Emscripten használatával korábban lefordított C/C++ kódhoz vagy kódhoz:
- Objektumfájlok (
.o) - Archív fájlok (
.a) - Bitkód (
.bc) - Önálló WebAssembly-modulok (
.wasm)
Az előre összeállított függőségeket általában a .NET WebAssembly futtatókörnyezet létrehozásához használt Emscripten ugyanazon verziójával kell létrehozni.
Megjegyzés:
A Mono/WebAssembly MSBuild tulajdonságairól és céljairól lásd: WasmApp.targets (dotnet/runtime GitHub-adattár). A közös MSBuild tulajdonságok hivatalos dokumentációját a Blazor MSBuild konfigurációs beállítások dokumentálása (dotnet/docs #27395) terv szerint tervezik.
Natív kód használata
Ez a szakasz bemutatja, hogyan adhat hozzá egyszerű natív C-függvényt egy Blazor WebAssembly alkalmazáshoz.
Hozzon létre egy új Blazor WebAssembly projektet.
Adjon hozzá egy Test.c fájlt a projekthez egy C függvénnyel a számítási faktoriálisok számára.
Test.c:
int fact(int n)
{
if (n == 0) return 1;
return n * fact(n - 1);
}
MSBuild elemet NativeFileReference hozzáadni az alkalmazás projektfájljához Test.c (.csproj):
<ItemGroup>
<NativeFileReference Include="Test.c" />
</ItemGroup>
Razor Egy összetevőben adjon hozzá egy [DllImport] attribútumot a fact függvényhez a létrehozott Test kódtárban, és hívja meg a metódust az fact összetevő .NET-kódjából.
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);
}
Amikor az alkalmazást a telepített .NET WebAssembly buildelési eszközökkel hozza létre, a natív C-kód lesz lefordítva és csatolva a .NET WebAssembly futtatókörnyezethez (dotnet.wasm). Az alkalmazás létrehozása után futtassa az alkalmazást a renderelt faktoriális érték megtekintéséhez.
Felügyelt C++ metódus-visszahívások
Címkézze fel a C++-nak átadott felügyelt metódusokat az [UnmanagedCallersOnly] attribútummal. Az attribútummal megjelölt metódusnak a következőnek kell lennie static: . Egy Razor összetevő példánymetódusának meghívásához adjon át egy GCHandle-et, amely az példányra vonatkozik, a C++-nak, majd adja vissza azt a natív kódnak. Másik lehetőségként használjon más módszert az összetevő példányának azonosítására.
Az attribútummal[DllImport] megjelölt metódusnak függvénymutatót (C# 9 vagy újabb) kell használnia a visszahívási argumentum delegált típusa helyett.
Megjegyzés:
A C# függvénymutató-típusok esetében a felügyelt oldalon lévő metódus aláírásában használja a [DllImport] ahelyett, hogy IntPtr-t használna. További információért lásd: [WASM] visszahívás natív kódból .NET-be: A függvénymutató-típusok elemzése aláírásokban nem támogatott (dotnet/runtime #56145).
Natív függőségek csomagolása NuGet-csomagban
A NuGet-csomagok natív függőségeket tartalmazhatnak a WebAssemblyben való használatra. Ezek a kódtárak és natív funkcióik ezután bármely Blazor WebAssembly alkalmazás számára elérhetők. A natív függőségek fájljait a WebAssembly számára kell összeállítani, és az browser-wasmarchitektúraspecifikus mappába kell csomagolni. A WebAssembly-specifikus függőségekre nem hivatkozik automatikusan a rendszer, és manuálisan kell hivatkozni s-ként NativeFileReference. A csomagkészítők úgy is hozzáadhatják a natív hivatkozásokat, hogy belevesznek egy .props fájlt a csomagba a hivatkozásokkal együtt.
SkiaSharp példatár használata
A SkiaSharp egy platformfüggetlen 2D grafikus kódtár a .NET-hez, amely a natív Skia grafikus kódtáron alapul, és támogatja a Blazor WebAssembly.
A szakasz bemutatja, hogyan implementálhatja a SkiaSharpt egy Blazor WebAssembly alkalmazásban.
Csomaghivatkozás hozzáadása a SkiaSharp.Views.Blazor csomaghoz egy Blazor WebAssembly projektben. A Visual Studio folyamatával csomagokat adhat hozzá egy alkalmazáshoz (NuGet-csomagok kezelése az 'Előzetes verziók belefoglalása' beállítással) vagy hajtsa végre a parancsot egy parancshéjban a dotnet add package opcióval.
dotnet add package –-prerelease SkiaSharp.Views.Blazor
Megjegyzés:
A csomagok .NET-alkalmazásokhoz való hozzáadásáról a Csomagok telepítése és kezelésea csomaghasználati munkafolyamatban (NuGet-dokumentáció) című cikkben talál útmutatást. Ellenőrizze a megfelelő csomagverziókat a NuGet.org.
Adjon hozzá egy összetevőt SKCanvasView az alkalmazáshoz a következőkkel:
-
SkiaSharpésSkiaSharp.Views.Blazornévterek. - A SkiaSharp Vászonnézet összetevőben rajzolni kívánt logika (
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);
}
}
Hozza létre az alkalmazást, amely több percet is igénybe vehet. Indítsa el az alkalmazást, és navigáljon a NativeDependencyExample összetevőhöz /native-dependency-example-nél.