ASP.NET Dependensi asli Core Blazor WebAssembly
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Blazor WebAssembly aplikasi dapat menggunakan dependensi asli yang dibuat untuk berjalan di WebAssembly. Anda dapat secara statis menautkan dependensi asli ke dalam runtime .NET WebAssembly menggunakan alat build .NET WebAssembly, alat yang sama yang digunakan untuk mengkompilasi Blazor aplikasi ke WebAssembly dan untuk menautkan ulang runtime untuk menghapus fitur yang tidak digunakan.
Artikel ini hanya berlaku untuk Blazor WebAssembly.
Alat build .NET WebAssembly
Alat build .NET WebAssembly didasarkan pada Emscripten, toolchain pengkompilasi untuk platform web. Untuk informasi selengkapnya tentang alat build, termasuk penginstalan, lihat alat build ASP.NET Core Blazor WebAssembly dan kompilasi ahead-of-time (AOT).
Tambahkan dependensi asli ke Blazor WebAssembly aplikasi dengan menambahkan NativeFileReference
item dalam file proyek aplikasi. Ketika proyek dibangun, masing-masing NativeFileReference
diteruskan ke Emscripten oleh alat build .NET WebAssembly sehingga dikompilasi dan ditautkan ke dalam runtime. Selanjutnya, p/invoke
ke dalam kode asli dari kode .NET aplikasi.
Umumnya, kode asli portabel apa pun dapat digunakan sebagai dependensi asli dengan Blazor WebAssembly. Anda dapat menambahkan dependensi asli ke kode C/C++ atau kode yang sebelumnya dikompilasi menggunakan Emscripten:
- File objek (
.o
) - File arsip (
.a
) - Bitcode (
.bc
) - Modul WebAssembly Mandiri (
.wasm
)
Dependensi bawaan biasanya harus dibangun menggunakan versi Emscripten yang sama yang digunakan untuk membangun runtime .NET WebAssembly.
Catatan
Untuk properti dan target MSBuild Mono/WebAssembly, lihat WasmApp.targets
(dotnet/runtime
repositori GitHub). Dokumentasi resmi untuk properti MSBuild umum direncanakan per opsi konfigurasi msbuild Dokumen blazor (dotnet/docs
#27395).
Menggunakan kode asli
Tambahkan fungsi C asli sederhana ke Blazor WebAssembly aplikasi:
Buat proyek baru Blazor WebAssembly .
Test.c
Tambahkan file ke proyek.Tambahkan fungsi C untuk faktorial komputasi.
Test.c
:int fact(int n) { if (n == 0) return 1; return n * fact(n - 1); }
NativeFileReference
Tambahkan untukTest.c
dalam file proyek aplikasi:<ItemGroup> <NativeFileReference Include="Test.c" /> </ItemGroup>
Razor Dalam komponen, tambahkan DllImportAttribute untuk
fact
fungsi di pustaka yang dihasilkanTest
dan panggilfact
metode dari kode .NET dalam komponen.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); }
Saat Anda membuat aplikasi dengan alat build .NET WebAssembly yang diinstal, kode C asli dikompilasi dan ditautkan ke dalam runtime .NET WebAssembly (dotnet.wasm
). Setelah aplikasi dibuat, jalankan aplikasi untuk melihat nilai faktorial yang dirender.
Panggilan balik metode terkelola C++
Beri label metode terkelola yang diteruskan ke C++ dengan [UnmanagedCallersOnly]
atribut .
Metode yang ditandai dengan [UnmanagedCallersOnly]
atribut harus static
. Untuk memanggil metode instans dalam Razor komponen, teruskan GCHandle
untuk instans ke C++ lalu teruskan kembali ke aslinya. Atau, gunakan beberapa metode lain untuk mengidentifikasi instans komponen.
Metode yang ditandai dengan [DllImport]
harus menggunakan penunjuk fungsi C# 9.0 daripada jenis delegasi untuk argumen panggilan balik.
Catatan
Untuk jenis penunjuk fungsi C# dalam [DllImport]
metode, gunakan IntPtr
dalam tanda tangan metode di sisi terkelola alih-alih delegate *unmanaged<int, void>
. Untuk informasi selengkapnya, lihat Panggilan balik [WASM] dari kode asli ke .NET: Mengurai jenis penunjuk fungsi dalam tanda tangan tidak didukung (dotnet/runtime #56145).
Mengemas dependensi asli dalam paket NuGet
Paket NuGet dapat berisi dependensi asli untuk digunakan di WebAssembly. Pustaka ini dan fungsionalitas aslinya kemudian tersedia untuk aplikasi apa pun Blazor WebAssembly . File untuk dependensi asli harus dibuat untuk WebAssembly dan dipaketkan dalam browser-wasm
folder khusus arsitektur. Dependensi khusus WebAssembly tidak dirujuk secara otomatis dan harus dirujuk secara manual sebagai NativeFileReference
. Penulis paket dapat memilih untuk menambahkan referensi asli dengan menyertakan .props
file dalam paket dengan referensi.
Penggunaan pustaka contoh SkiaSharp
SkiaSharp adalah pustaka grafis 2D lintas platform untuk .NET berdasarkan pustaka grafis Skia asli dengan dukungan untuk Blazor WebAssembly.
Untuk menggunakan SkiaSharp di Blazor WebAssembly aplikasi:
Tambahkan referensi paket ke
SkiaSharp.Views.Blazor
paket dalam Blazor WebAssembly proyek. Gunakan proses Visual Studio untuk menambahkan paket ke aplikasi (Kelola Paket NuGet dengan Sertakan prarilis dipilih) atau jalankandotnet add package
perintah dalam shell perintah:dotnet add package –-prerelease SkiaSharp.Views.Blazor
Catatan
Untuk panduan tentang menambahkan paket ke aplikasi .NET, lihat artikel di bagian Menginstal dan mengelola paket di Alur kerja konsumsi paket (dokumentasi NuGet). Konfirmasikan versi paket yang benar di NuGet.org.
SKCanvasView
Tambahkan komponen ke aplikasi dengan yang berikut ini:SkiaSharp
danSkiaSharp.Views.Blazor
namespace layanan.- Logika untuk menggambar di komponen Tampilan Kanvas 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); } }
Buat aplikasi, yang mungkin memakan waktu beberapa menit. Jalankan aplikasi dan navigasikan ke
NativeDependencyExample
komponen di/native-dependency-example
.
Sumber Daya Tambahan:
ASP.NET Core