Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In ASP.NET Core 3.0 en 3.1 heeft de RenderTreeFrame struct verschillende readonly public velden weergegeven, waaronder FrameType, Sequenceen andere. In ASP.NET Core 5.0 RC1 en latere versies zijn alle readonly public velden gewijzigd in readonly public eigenschappen.
Deze wijziging heeft geen invloed op veel ontwikkelaars omdat:
- Elke app of bibliotheek die gewoon gebruikmaakt van
.razorbestanden (of zelfs handmatige RenderTreeBuilder aanroepen) om de onderdelen ervan te definiëren, verwijst niet rechtstreeks naar dit type. - Het
RenderTreeFrametype zelf wordt beschouwd als een implementatiedetail, niet bedoeld voor gebruik buiten het kader. ASP.NET Core 3.0 en hoger bevat een analyse waarmee compilerwaarschuwingen worden aangegeven als het type rechtstreeks wordt gebruikt. - Zelfs als u rechtstreeks naar
RenderTreeFrameverwijst, is deze wijziging binair brekend, maar niet bronbrekend. Dat wil gezegd dat uw bestaande broncode correct wordt gecompileerd en werkt. Er treedt alleen een probleem op als u compileert op basis van een .NET Core 3.x-framework en deze binaire bestanden vervolgens uitvoert op het .NET 5- of hoger-framework.
Voor discussie, zie GitHub-issue dotnet/aspnetcore#25727.
Geïntroduceerde versie
5.0 RC1
Oud gedrag
Publieke leden op RenderTreeFrame worden gedefinieerd als velden. Bijvoorbeeld renderTreeFrame.Sequence en renderTreeFrame.ElementName.
Nieuw gedrag
Openbare leden op RenderTreeFrame worden gedefinieerd als eigenschappen met dezelfde namen als eerder. Bijvoorbeeld renderTreeFrame.Sequence en renderTreeFrame.ElementName.
Als oudere vooraf gecompileerde code niet opnieuw is gecompileerd sinds deze wijziging, kan deze een uitzondering genereren die vergelijkbaar is met MissingFieldException: Field not found: 'Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.FrameType'.
Reden voor wijziging
Deze wijziging was nodig voor het implementeren van krachtige prestatieverbeteringen in de rendering van Razor-onderdelen in ASP.NET Core 5.0. Dezelfde veiligheids- en inkapselingsniveaus worden gehandhaafd.
Aanbevolen actie
De meeste Blazor-ontwikkelaars worden niet beïnvloed door deze wijziging. De wijziging is waarschijnlijker van invloed op bibliotheek- en pakketauteurs, maar alleen in zeldzame gevallen. Specifiek wanneer u ontwikkelt:
- Een app en ASP.NET Core 3.x gebruiken of upgraden naar 5.0 RC1 of hoger, hoeft u uw eigen code niet te wijzigen. Als u echter afhankelijk bent van een bibliotheek die is bijgewerkt om rekening te houden met deze wijziging, moet u bijwerken naar een nieuwere versie van die bibliotheek.
- Een bibliotheek en alleen ASP.NET Core 5.0 RC1 of hoger wilt ondersteunen, is geen actie nodig. Zorg ervoor dat uw projectbestand een
<TargetFramework>waarde vannet5.0of een latere versie declareert. - Als u een bibliotheek hebt en ondersteuning wilt bieden voor zowel ASP.NET Core 3.x als 5.0, bepaal dan of uw code leden van een object leest
RenderTreeFrame. Bijvoorbeeld evaluerensomeRenderTreeFrame.FrameType.- De meeste bibliotheken zullen
RenderTreeFramegeen leden lezen, inclusief bibliotheken die.razoronderdelen bevatten. In dit geval is er geen actie nodig. - Als uw bibliotheek dat doet, moet u echter multiplatformgericht zijn om zowel
netstandard2.1alsnet5.0te ondersteunen. Pas de volgende wijzigingen toe in uw projectbestand:Vervang het bestaande
<TargetFramework>element door<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>.Gebruik een verwijzing naar een voorwaardelijk
Microsoft.AspNetCore.Componentspakket om rekening te houden met beide versies die u wilt ondersteunen. Voorbeeld:<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'" />
- De meeste bibliotheken zullen
Zie dit diff showing how @jsakamoto already upgraded the Toolbelt.Blazor.HeadElement libraryvoor meer uitleg.