PublishedTrimmed-projecten mislukken serialisatie op basis van reflectie
Projecten die de eigenschap PublishTrimmed MSBuild inschakelen, schakelen nu automatisch de standaardinstellingen op basis van weerspiegeling van System.Text.Json uit. Met andere woorden, instelling PublishTrimmed
voor true
het automatisch instellen van de JsonSerializerIsReflectionEnabledByDefault
MSBuild-eigenschap op false
tenzij anders opgegeven in de projectconfiguratie.
Vorig gedrag
Vóór deze wijziging hebben projecten waarvoor de PublishTrimmed
eigenschap is ingeschakeld, dat wil <PublishTrimmed>true</PublishTrimmed>
gezegd, een bijgesneden toepassing gepubliceerd. Het standaardserialisatiegedrag op basis van weerspiegeling is echter niet noodzakelijkerwijs uitgeschakeld. Afhankelijk van de code die is ingekort, kan de volgende code serialisatie wel of niet lukken, of worden de juiste serialisatiegegevens wel of niet uitgevoerd.
JsonSerializer.Serialize(new { Value = 42 });
Nieuw gedrag
Vanaf .NET 8 mislukken projecten waarvoor de PublishTrimmed
eigenschap is ingeschakeld, de serialisatie. De code JsonSerializer.Serialize(new { Value = 42 });
genereert de volgende uitzondering:
System.InvalidOperationException: Serialisatie op basis van reflectie is uitgeschakeld voor deze toepassing.
Versie geïntroduceerd
.NET 8 Preview 7
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Deze wijziging zorgt ervoor dat bijgesneden toepassingen gebruikmaken van de juiste standaardinstellingen. Het helpt gebruikers ook om aanbevolen procedures te gebruiken die geschikt zijn voor bijgesneden toepassingen, dat wil gezegd, de brongenerator gebruiken en onbedoelde afhankelijkheid van de onveilige onderdelen op basis van weerspiegeling voorkomen.
Aanbevolen actie
Om ervoor te zorgen dat serialisatie slaagt, raden we u aan uw ingekorte toepassingen te migreren om de brongenerator te gebruiken.
Als u echter weerspiegeling moet gebruiken, kunt u het oorspronkelijke gedrag herstellen door de JsonSerializerIsReflectionEnabledByDefault
eigenschap expliciet in te schakelen in uw projectbestand:
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>
Betrokken API's
N.v.t.