ASP.NET Core Blazor WebAssembly yerel bağımlılıkları
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Blazor WebAssembly uygulamalar, WebAssembly üzerinde çalışacak şekilde oluşturulmuş yerel bağımlılıkları kullanabilir. Yerel bağımlılıkları statik olarak .NET WebAssembly çalışma zamanına bağlayabilirsiniz. .NET WebAssembly derleme araçları, önceden (AOT) WebAssembly'ye uygulama Blazor derlemek ve kullanılmayan özellikleri kaldırmak için çalışma zamanını yeniden bağlamak için kullanılan araçlar.
Bu makale yalnızca için Blazor WebAssemblygeçerlidir.
.NET WebAssembly derleme araçları
.NET WebAssembly derleme araçları, web platformu için bir derleyici araç zinciri olan Emscripten'i temel alır. Yükleme dahil olmak üzere derleme araçları hakkında daha fazla bilgi için bkz . ASP.NET Core Blazor WebAssembly derleme araçları ve önceden (AOT) derleme.
Uygulamanın proje dosyasına öğe ekleyerek NativeFileReference
uygulamaya Blazor WebAssembly yerel bağımlılıklar ekleyin. Proje oluşturulduğunda, her NativeFileReference
biri .NET WebAssembly derleme araçları tarafından Emscripten'e geçirilir, böylece bunlar derlenir ve çalışma zamanına bağlanır. Ardından, p/invoke
uygulamanın .NET kodundaki yerel koda geçin.
Genel olarak, tüm taşınabilir yerel kodlar ile Blazor WebAssemblyyerel bağımlılık olarak kullanılabilir. C/C++ koduna veya daha önce Emscripten kullanılarak derlenmiş koda yerel bağımlılıklar ekleyebilirsiniz:
- Nesne dosyaları (
.o
) - Dosyaları arşivle (
.a
) - Bit kodu (
.bc
) - Tek başına WebAssembly modülleri (
.wasm
)
Önceden oluşturulmuş bağımlılıklar genellikle .NET WebAssembly çalışma zamanını derlemek için kullanılan Emscripten sürümü kullanılarak oluşturulmalıdır.
Not
Mono/WebAssembly MSBuild özellikleri ve hedefleri için bkz WasmApp.targets
. (dotnet/runtime
GitHub deposu). Ortak MSBuild özellikleri için resmi belgeler, Belge blazor msbuild yapılandırma seçenekleri (dotnet/docs
#27395) başına planlanmaktadır.
Yerel kod kullanma
Uygulamaya basit bir yerel C işlevi Blazor WebAssembly ekleyin:
Yeni Blazor WebAssembly bir proje oluşturun.
Projeye bir
Test.c
dosya ekleyin.Bilgi işlem faktöriyeli için bir C işlevi ekleyin.
Test.c
:int fact(int n) { if (n == 0) return 1; return n * fact(n - 1); }
Uygulamanın proje dosyasına for
NativeFileReference
Test.c
ekleyin:<ItemGroup> <NativeFileReference Include="Test.c" /> </ItemGroup>
Bir Razor bileşende, oluşturulan
Test
kitaplıktafact
işlev için bir DllImportAttribute ekleyin ve bileşenindekifact
.NET kodundan yöntemini çağırın.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); }
Uygulamayı .NET WebAssembly derleme araçları yüklü olarak oluşturduğunuzda, yerel C kodu derlenip .NET WebAssembly çalışma zamanına (dotnet.wasm
) bağlanır. Uygulama oluşturulduktan sonra işlenen faktöriyel değeri görmek için uygulamayı çalıştırın.
C++ yönetilen yöntem geri çağırmaları
C++ öğesine geçirilen yönetilen yöntemleri özniteliğiyle etiketle [UnmanagedCallersOnly]
.
özniteliğiyle [UnmanagedCallersOnly]
işaretlenmiş yöntem olmalıdır static
. Bir bileşendeki Razor bir örnek yöntemini çağırmak için örneği GCHandle
için C++ öğesine geçirin ve yerele geri geçirin. Alternatif olarak, bileşenin örneğini tanımlamak için başka bir yöntem kullanın.
ile [DllImport]
işaretlenen yöntem, geri çağırma bağımsız değişkeni için temsilci türü yerine C# 9.0 işlev işaretçisi kullanmalıdır.
Not
Yöntemlerdeki [DllImport]
C# işlev işaretçisi türleri için, yerine yönetilen taraftaki delegate *unmanaged<int, void>
yöntem imzasında kullanınIntPtr
. Daha fazla bilgi için bkz . [WASM] yerel koddan .NET'e geri çağırma: İşlev işaretçisi türlerinin imzalarda ayrıştırılması desteklenmiyor (dotnet/runtime #56145).
NuGet paketinde yerel bağımlılıkları paketleme
NuGet paketleri WebAssembly'de kullanılmak üzere yerel bağımlılıklar içerebilir. Bu kitaplıklar ve yerel işlevleri daha sonra tüm Blazor WebAssembly uygulamalar tarafından kullanılabilir. Yerel bağımlılıkların dosyaları WebAssembly için derlenmeli ve mimariye browser-wasm
özgü klasörde paketlenmelidir. WebAssembly'ye özgü bağımlılıklara otomatik olarak başvurulmuyor ve bunlar el NativeFileReference
ile başvurulmalıdır. Paket yazarları, başvurularla birlikte pakete bir .props
dosya ekleyerek yerel başvuruları eklemeyi seçebilir.
SkiaSharp örnek kitaplık kullanımı
SkiaSharp, desteği olan yerel Skia grafik kitaplığını temel alan .NET için Blazor WebAssemblyplatformlar arası bir 2B grafik kitaplığıdır.
SkiaSharp'ı bir Blazor WebAssembly uygulamada kullanmak için:
Projedeki
SkiaSharp.Views.Blazor
Blazor WebAssembly pakete paket başvurusu ekleyin. Bir uygulamaya paket eklemek için Visual Studio'nun işlemini kullanın (Ön sürümü dahil et seçili olarak NuGet Paketlerini Yönet) veya komutu bir komut kabuğunda yürütündotnet add package
:dotnet add package –-prerelease SkiaSharp.Views.Blazor
Not
.NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri) paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.
Aşağıdakilerle uygulamaya bir
SKCanvasView
bileşen ekleyin:SkiaSharp
veSkiaSharp.Views.Blazor
ad alanları.- SkiaSharp Tuval Görünümü bileşeninde (
SKCanvasView
) çizim yapmak için mantık.
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); } }
Uygulamayı derlemek birkaç dakika sürebilir. Uygulamayı çalıştırın ve konumundaki
/native-dependency-example
bileşeneNativeDependencyExample
gidin.
Ek kaynaklar
ASP.NET Core