Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No ASP.NET Core 3.0 e 3.1, o RenderTreeFrame struct expôs vários readonly public campos, incluindo FrameType, Sequence, e outros. No ASP.NET Core 5.0 RC1 e versões posteriores, todos os readonly public campos foram alterados para readonly public propriedades.
Essa alteração não afetará muitos desenvolvedores porque:
- Qualquer aplicativo ou biblioteca que simplesmente use
.razorarquivos (ou mesmo chamadas manuais RenderTreeBuilder ) para definir seus componentes não estaria fazendo referência a esse tipo diretamente. - O
RenderTreeFrametipo em si é considerado como um detalhe de implementação, não destinado a uso fora do quadro. ASP.NET Core 3.0 e nas versões posteriores inclui um analisador que emite avisos do compilador se o tipo estiver a ser usado diretamente. - Mesmo que faça referência a
RenderTreeFramediretamente, esta alteração quebra a compatibilidade binária, mas não quebra a do código fonte. Ou seja, seu código-fonte existente será compilado e se comportará corretamente. Você só encontrará um problema se compilar em uma estrutura do .NET Core 3.x e, em seguida, executar esses binários no .NET 5 ou em uma estrutura posterior.
Para discussão, consulte GitHub issue dotnet/aspnetcore#25727.
Versão introduzida
5,0 RC1
Comportamento antigo
Membros públicos em RenderTreeFrame são definidos como campos. Por exemplo, renderTreeFrame.Sequence e renderTreeFrame.ElementName.
Novo comportamento
Membros públicos em RenderTreeFrame são definidos como propriedades com os mesmos nomes que antes. Por exemplo, renderTreeFrame.Sequence e renderTreeFrame.ElementName.
Se o código pré-compilado mais antigo não tiver sido recompilado desde essa alteração, ele pode lançar uma exceção semelhante a MissingFieldException: Field not found: 'Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame.FrameType'.
Motivo da mudança
Essa alteração foi necessária para implementar melhorias de desempenho de alto impacto na renderização de componentes do Razor no ASP.NET Core 5.0. Os mesmos níveis de segurança e encapsulamento são mantidos.
Ação recomendada
A maioria dos desenvolvedores Blazor não são afetados por essa alteração. É mais provável que a alteração afete os autores de bibliotecas e pacotes, mas apenas em casos raros. Especificamente, se você estiver desenvolvendo:
- Se você estiver utilizando um aplicativo com ASP.NET Core 3.x ou fizer um upgrade para 5.0 RC1 ou posterior, não precisa alterar o seu código. No entanto, se você depender de uma biblioteca que atualizou para levar em conta essa alteração, precisará atualizar para uma versão mais recente dessa biblioteca.
- Uma biblioteca e deseja suportar apenas ASP.NET Core 5.0 RC1 ou posterior, nenhuma ação é necessária. Apenas certifique-se de que seu arquivo de projeto declare um
<TargetFramework>valor denet5.0ou uma versão posterior. - Uma biblioteca e deseja oferecer suporte ao ASP.NET Core 3.x e 5.0, determine se seu código lê algum
RenderTreeFramemembro. Por exemplo, avaliarsomeRenderTreeFrame.FrameType.- A maioria das bibliotecas não são capazes de ler
RenderTreeFramemembros, mesmo aquelas que contêm.razorcomponentes. Neste caso, nenhuma ação é necessária. - No entanto, se a sua biblioteca fizer isso, precisará definir múltiplos alvos para suportar tanto
netstandard2.1comonet5.0. Aplique as seguintes alterações no arquivo de projeto:Substitua o elemento existente
<TargetFramework>por<TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>.Use uma referência de pacote condicional
Microsoft.AspNetCore.Componentspara contabilizar ambas as versões que você deseja suportar. Por exemplo:<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'" />
- A maioria das bibliotecas não são capazes de ler
Veja este diff showing how @jsakamoto already upgraded the Toolbelt.Blazor.HeadElement librarydocumento para mais esclarecimentos.