Delen via


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.

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.

Zie ook