Projetos PublishedTrimmed falham na serialização baseada em reflexão
Os projetos que habilitam a propriedade PublishTrimmed MSBuild agora desativam automaticamente os padrões baseados em reflexão de System.Text.Json. Em outras palavras, a configuração PublishTrimmed
para true
definir automaticamente a JsonSerializerIsReflectionEnabledByDefault
propriedade MSBuild para false
a menos que especificado de outra forma na configuração do projeto.
Comportamento anterior
Antes dessa alteração, os projetos que tinham a PublishTrimmed
propriedade habilitada, ou seja, <PublishTrimmed>true</PublishTrimmed>
publicavam um aplicativo cortado. No entanto, o comportamento de serialização padrão baseado em reflexão não foi necessariamente desabilitado. Dependendo do código cortado, o código a seguir pode ou não ter êxito na serialização, ou pode ou não produzir os dados de serialização corretos.
JsonSerializer.Serialize(new { Value = 42 });
Novo comportamento
A partir do .NET 8, os projetos que têm a propriedade habilitada PublishTrimmed
falham completamente na serialização. O código JsonSerializer.Serialize(new { Value = 42 });
lança a seguinte exceção:
System.InvalidOperationException: A serialização baseada em reflexão foi desativada para este aplicativo.
Versão introduzida
.NET 8 Visualização 7
Tipo de mudança de rutura
Esta mudança é uma mudança comportamental.
Razão para a alteração
Essa alteração garante que os aplicativos cortados usem os padrões apropriados. Ele também orienta os usuários a adotar práticas recomendadas adequadas para aplicativos cortados, ou seja, usar o gerador de origem e evitar a dependência acidental dos componentes baseados em reflexão inseguros.
Ação recomendada
Para garantir que a serialização seja bem-sucedida, recomendamos que você migre seus aplicativos cortados para usar o gerador de origem.
No entanto, se você precisar usar reflexão, poderá reverter para o comportamento original habilitando explicitamente a JsonSerializerIsReflectionEnabledByDefault
propriedade em seu arquivo de projeto:
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>
APIs afetadas
N/A