Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En ASP.NET Core 3.0 y 3.1, la RenderTreeFrame estructura expone varios readonly public campos, incluidos FrameType, Sequencey otros. En ASP.NET Core 5.0 RC1 y versiones posteriores, todos los readonly public campos cambiaron a readonly public propiedades.
Este cambio no afectará a muchos desarrolladores porque:
- Cualquier aplicación o biblioteca que simplemente use
.razorarchivos (o incluso llamadas manuales RenderTreeBuilder ) para definir sus componentes no haría referencia directamente a este tipo. - El
RenderTreeFramepropio tipo se considera un detalle de implementación, no pensado para su uso fuera del marco. ASP.NET Core 3.0 y versiones posteriores incluye un analizador que emite advertencias del compilador si el tipo se usa directamente. - Incluso si hace referencia
RenderTreeFramedirectamente, este cambio es una ruptura binaria, pero no una ruptura del código fuente. Es decir, el código fuente existente se compilará y se comportará correctamente. Solo encontrará un problema si se compila en un marco de .NET Core 3.x y, a continuación, ejecuta esos archivos binarios en .NET 5 o en un marco posterior.
Para la discusión, consulte el problema de GitHub dotnet/aspnetcore#25727.
Versión introducida
5.0 RC1
Comportamiento anterior
Los miembros públicos en RenderTreeFrame se definen como campos. Por ejemplo, renderTreeFrame.Sequence y renderTreeFrame.ElementName.
Nuevo comportamiento
Los miembros públicos en RenderTreeFrame se definen como propiedades con los mismos nombres que antes. Por ejemplo, renderTreeFrame.Sequence y renderTreeFrame.ElementName.
Si el código precompilado anterior no se ha vuelto a compilar desde este cambio, puede producir una excepción similar a MissingFieldException: Field not found: 'Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.FrameType'.
Motivo del cambio
Este cambio era necesario para implementar mejoras de rendimiento de alto impacto en la Razor representación de componentes en ASP.NET Core 5.0. Se mantienen los mismos niveles de seguridad y encapsulación.
Acción recomendada
La mayoría Blazor de los desarrolladores no se ven afectados por este cambio. Es más probable que el cambio afecte a los autores de bibliotecas y paquetes, pero solo en raras ocasiones. En concreto, si está desarrollando:
- Si tienes una aplicación usando ASP.NET Core 3.x o la estás actualizando a 5.0 RC1 o una versión posterior, no es necesario cambiar tu propio código. Sin embargo, si depende de una biblioteca actualizada para tener en cuenta este cambio, debe actualizar a una versión más reciente de esa biblioteca.
- Una biblioteca y desea admitir solo ASP.NET Core 5.0 RC1 o posterior, no se necesita ninguna acción. Solo tiene que asegurarse de que el archivo de proyecto declare el valor
<TargetFramework>denet5.0o una versión posterior. - Si tienes una biblioteca y deseas admitir tanto ASP.NET Core 3.x como 5.0, debes determinar si tu código lee algún
RenderTreeFramemiembro. Por ejemplo, evaluarsomeRenderTreeFrame.FrameType.- La mayoría de las bibliotecas no leerán a los miembros de
RenderTreeFrame, incluidas aquellas bibliotecas que contienen componentes de.razor. En este caso, no se necesita ninguna acción. - Sin embargo, si tu biblioteca lo hace, tendrás que dirigirte a múltiples objetivos para admitir tanto a
netstandard2.1como anet5.0. Aplique los siguientes cambios en el archivo del proyecto:Reemplace el elemento existente
<TargetFramework>por<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>.Use una referencia de paquete condicional
Microsoft.AspNetCore.Componentspara tener en cuenta ambas versiones que desee admitir. Por ejemplo:<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'" />
- La mayoría de las bibliotecas no leerán a los miembros de
Para obtener más aclaración, vea este diff showing how @jsakamoto already upgraded the Toolbelt.Blazor.HeadElement library.