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
define automaticamente a propriedade MSBuild JsonSerializerIsReflectionEnabledByDefault
como false
, a menos que seja especificada de outra forma na configuração do projeto.
Comportamento anterior
Antes dessa alteração, em projetos que têm a propriedade PublishTrimmed
habilitada, <PublishTrimmed>true</PublishTrimmed>
publicou um aplicativo cortado. No entanto, o comportamento de serialização padrão baseado em reflexão não foi necessariamente desabilitado. Dependendo de qual código foi cortado, o código a seguir pode ou não ter êxito na serialização ou pode ou não gerar os dados de serialização corretos.
JsonSerializer.Serialize(new { Value = 42 });
Novo comportamento
A partir do .NET 8, projetos que têm a propriedade PublishTrimmed
habilitada falham na serialização. O código JsonSerializer.Serialize(new { Value = 42 });
gera a seguinte exceção:
System.InvalidOperationException: a serialização baseada em reflexão foi desabilitada para este aplicativo.
Versão introduzida
Prévia 7 do .NET 8
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Essa alteração garante que os aplicativos cortados usem os padrões apropriados. Ela também orienta os usuários a adotar práticas recomendadas adequadas para aplicativos cortados, ou seja, usar o gerador de origem e evitar dependência acidental nos componentes não seguros baseados em reflexão.
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 a reflexão, poderá reverter para o comportamento original habilitando explicitamente a propriedade JsonSerializerIsReflectionEnabledByDefault
em seu arquivo de projeto:
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>
APIs afetadas
N/D