Blazor: Bidang publik baca-baca RenderTreeFrame telah menjadi properti
Dalam ASP.NET Core 3.0 dan 3.1, RenderTreeFrame struktur mengekspos berbagai readonly public
bidang, termasuk FrameType, Sequence, dan lainnya. Di ASP.NET Core 5.0 RC1 dan versi yang lebih baru, semua readonly public
bidang berubah menjadi readonly public
properti.
Perubahan ini tidak akan memengaruhi banyak pengembang karena:
- Aplikasi atau pustaka apa pun yang hanya menggunakan
.razor
file (atau bahkan panggilan manual RenderTreeBuilder ) untuk menentukan komponennya tidak akan merujuk jenis ini secara langsung. - Jenis itu
RenderTreeFrame
sendiri dianggap sebagai detail implementasi, tidak dimaksudkan untuk digunakan di luar kerangka kerja. ASP.NET Core 3.0 dan yang lebih baru menyertakan penganalisis yang mengeluarkan peringatan kompilator jika jenis tersebut digunakan secara langsung. - Bahkan jika Anda mereferensikan
RenderTreeFrame
secara langsung, perubahan ini melanggar biner tetapi tidak melanggar sumber. Artinya, kode sumber Anda yang ada akan dikompilasi dan berulah dengan benar. Anda hanya akan mengalami masalah jika mengkompilasi terhadap kerangka kerja .NET Core 3.x lalu menjalankan biner tersebut terhadap .NET 5 atau kerangka kerja yang lebih baru.
Untuk diskusi, lihat Masalah GitHub dotnet/aspnetcore#25727.
Versi yang diperkenalkan
5.0 RC1
Perilaku yang lama
Anggota publik didefinisikan RenderTreeFrame
sebagai bidang. Misalnya, renderTreeFrame.Sequence
dan renderTreeFrame.ElementName
.
Perilaku yang baru
Anggota publik didefinisikan RenderTreeFrame
sebagai properti dengan nama yang sama seperti sebelumnya. Misalnya, renderTreeFrame.Sequence
dan renderTreeFrame.ElementName
.
Jika kode lama yang telah dikompilasi sebelumnya belum dikompilasi ulang sejak perubahan ini, kode mungkin melemparkan pengecualian yang mirip dengan MissingFieldException: Field tidak ditemukan: 'Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.FrameType'.
Alasan untuk berubah
Perubahan ini diperlukan untuk menerapkan peningkatan performa berdampak tinggi dalam rendering komponen Razor di ASP.NET Core 5.0. Tingkat keamanan dan enkapulasi yang sama dipertahankan.
Tindakan yang direkomendasikan
Sebagian besar pengembang Blazor tidak terpengaruh oleh perubahan ini. Perubahan ini lebih mungkin memengaruhi pustaka dan penulis paket, tetapi hanya dalam kasus yang jarang terjadi. Secara khusus, jika Anda mengembangkan:
- Aplikasi dan menggunakan ASP.NET Core 3.x atau meningkatkan ke 5.0 RC1 atau yang lebih baru, Anda tidak perlu mengubah kode Anda sendiri. Namun, jika Anda bergantung pada pustaka yang ditingkatkan untuk memperhitungkan perubahan ini, maka Anda perlu memperbarui ke versi pustaka yang lebih baru.
- Pustaka dan hanya ingin mendukung ASP.NET Core 5.0 RC1 atau yang lebih baru, tidak ada tindakan yang diperlukan. Pastikan file proyek Anda mendeklarasikan
<TargetFramework>
nilainet5.0
atau versi yang lebih baru. - Pustaka dan ingin mendukung ASP.NET Core 3.x dan 5.0, tentukan apakah kode Anda membaca anggota mana pun
RenderTreeFrame
. Misalnya, mengevaluasisomeRenderTreeFrame.FrameType
.- Sebagian besar pustaka tidak akan membaca
RenderTreeFrame
anggota, termasuk pustaka yang berisi.razor
komponen. Dalam hal ini, tidak ada tindakan yang diperlukan. - Namun, jika pustaka Anda melakukannya, Anda harus multi-target untuk mendukung dan
netstandard2.1
net5.0
. Terapkan perubahan berikut dalam file proyek Anda:Ganti elemen yang
<TargetFramework>
ada dengan<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>
.Gunakan referensi paket bersyarah
Microsoft.AspNetCore.Components
untuk memperhitungkan kedua versi yang ingin Anda dukung. Misalnya:<PackageReference Include="Microsoft.AspNetCore.Components" Version="3.0.0" Condition="'$(TargetFramework)' == 'netstandard2.0'" /> <PackageReference Include="Microsoft.AspNetCore.Components" Version="5.0.0-rc.1.*" Condition="'$(TargetFramework)' != 'netstandard2.0'" />
- Sebagian besar pustaka tidak akan membaca
Untuk klarifikasi lebih lanjut, lihat ini diff showing how @jsakamoto already upgraded the Toolbelt.Blazor.HeadElement
library.
API yang Terpengaruh
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk