Blazor: RenderTreeFrame salt okunur genel alanlar özellik haline geldi
ASP.NET Core 3.0 ve 3.1'de RenderTreeFrame yapısı, , Sequenceve diğerleri gibi FrameTypeçeşitli readonly public
alanları kullanıma sunar. ASP.NET Core 5.0 RC1 ve sonraki sürümlerinde tüm readonly public
alanlar özelliklere readonly public
değiştirildi.
Bu değişiklik aşağıdakilerden dolayı birçok geliştiriciyi etkilemez:
- Bileşenlerini tanımlamak için yalnızca dosyaları (hatta el ile RenderTreeBuilder çağrıları) kullanan
.razor
herhangi bir uygulama veya kitaplık bu türe doğrudan başvurmaz. - Türün
RenderTreeFrame
kendisi, çerçeve dışında kullanılmak üzere tasarlanmamış bir uygulama ayrıntısı olarak kabul edilir. ASP.NET Core 3.0 ve üzeri, tür doğrudan kullanılıyorsa derleyici uyarıları veren bir çözümleyici içerir. - Doğrudan başvuruda
RenderTreeFrame
bulunursanız bile, bu değişiklik ikili hataya neden olur ancak kaynak kırılmaz. Başka bir ifadeyle, mevcut kaynak kodunuz derlenir ve düzgün şekilde davranır. Yalnızca bir .NET Core 3.x çerçevesiyle derlenirken ve sonra bu ikili dosyaları .NET 5 veya sonraki bir çerçevede çalıştırırken bir sorunla karşılaşırsınız.
Tartışma için bkz. GitHub sorunu dotnet/aspnetcore#25727.
Sürüm kullanıma sunulmuştur
5.0 RC1
Eski davranış
üzerindeki RenderTreeFrame
ortak üyeler alan olarak tanımlanır. Örneğin, renderTreeFrame.Sequence
ve renderTreeFrame.ElementName
.
Yeni davranış
üzerindeki RenderTreeFrame
ortak üyeler, önceki adlarla aynı adlara sahip özellikler olarak tanımlanır. Örneğin, renderTreeFrame.Sequence
ve renderTreeFrame.ElementName
.
Bu değişiklik sonrasında önceden derlenmiş eski kod yeniden derlenmemişse, MissingFieldException: Alan bulunamadı: 'Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.FrameType' benzeri bir özel durum oluşturabilir.
Değişiklik nedeni
Bu değişiklik, ASP.NET Core 5.0'da Razor bileşeni işlemesinde yüksek etkili performans geliştirmeleri uygulamak için gerekliydi. Aynı güvenlik ve kapsülleme düzeyleri korunur.
Önerilen eylem
Blazor geliştiricilerinin çoğu bu değişiklikten etkilenmez. Değişikliğin kitaplık ve paket yazarlarını etkileme olasılığı daha yüksektir, ancak yalnızca nadir durumlarda. Özellikle, geliştiriyorsanız:
- Bir uygulama ve ASP.NET Core 3.x veya 5.0 RC1 veya sonraki bir sürüme yükseltme kullanarak kendi kodunuzu değiştirmeniz gerekmez. Ancak, bu değişikliği hesaba eklemek üzere yükseltilen bir kitaplığa bağımlıysanız, bu kitaplığın daha yeni bir sürümüne güncelleştirmeniz gerekir.
- Yalnızca Core 5.0 RC1 veya sonraki ASP.NET desteklemek isteyen bir kitaplık, hiçbir eyleme gerek yoktur. Proje dosyanızın veya sonraki bir
<TargetFramework>
sürümünnet5.0
değerini bildirdiğinden emin olun. - Hem ASP.NET Core 3.x hem de 5.0'ı desteklemek isteyen bir kitaplık, kodunuzun üyeleri
RenderTreeFrame
okuyup okumadığını belirler. Örneğin, değerini değerlendirmeksomeRenderTreeFrame.FrameType
.- Çoğu kitaplık, bileşen içeren
.razor
kitaplıklar da dahil olmak üzere üyeleri okumazRenderTreeFrame
. Bu durumda herhangi bir eylem gerekmez. - Ancak kitaplığınız bunu yaparsa hem
net5.0
hem denetstandard2.1
'yi desteklemek için çok hedefli olmanız gerekir. Proje dosyanıza aşağıdaki değişiklikleri uygulayın:Var olan
<TargetFramework>
öğesini ile<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>
değiştirin.Desteklemek istediğiniz her iki sürümü de hesaba eklemek için koşullu
Microsoft.AspNetCore.Components
paket başvurusu kullanın. Örneğin:<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'" />
- Çoğu kitaplık, bileşen içeren
Daha fazla açıklama için bu diff showing how @jsakamoto already upgraded the Toolbelt.Blazor.HeadElement
librarybölümüne bakın.
Etkilenen API’ler
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin