Megosztás a következőn keresztül:


ASP.NET Alapvető Blazor WebAssembly natív függőségek

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 és SkiaSharp.Views.Blazor né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.

További erőforrások