Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Projekte, die die MSBuild-Eigenschaft PublishTrimmed aktivieren, deaktivieren jetzt automatisch die reflexionsbasierten Standardwerte von System.Text.Json. Mit anderen Worten: Durch Festlegen von PublishTrimmed auf true, wird die MSBuild-Eigenschaft JsonSerializerIsReflectionEnabledByDefault automatisch auf ffalse estgelegt, sofern nicht anders in der Projektkonfiguration angegeben.
Vorheriges Verhalten
Vor dieser Änderung haben Projekte, bei denen die Eigenschaft PublishTrimmed aktiviert ist, d. h. <PublishTrimmed>true</PublishTrimmed>, eine gekürzte Anwendung veröffentlicht. Das reflexionsbasierte Standardserialisierungsverhalten wurde jedoch nicht notwendigerweise deaktiviert. Je nachdem, welcher Code gekürzt wurde, kann der folgende Code die Serialisierung möglicherweise erfolgreich ausführen oder die richtigen Serialisierungsdaten ausgeben.
JsonSerializer.Serialize(new { Value = 42 });
Neues Verhalten
Ab .NET 8 schlägt bei Projekten, bei denen die Eigenschaft PublishTrimmed aktiviert ist, die Serialisierung direkt fehl. Der Code JsonSerializer.Serialize(new { Value = 42 }); löst die folgende Ausnahme aus:
System.InvalidOperationException: Die reflexionsbasierte Serialisierung wurde für diese Anwendung deaktiviert.
Eingeführt in Version
.NET 8 Preview 7
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Diese Änderung stellt sicher, dass gekürzte Anwendungen die geeigneten Standardwerte verwenden. Außerdem werden Benutzer*innen dazu angehalten, bewährte Methoden zu übernehmen, die für gekürzte Anwendungen geeignet sind: d. h. den Quellgenerator verwenden und versehentliche Abhängigkeiten von den unsicheren reflexionsbasierten Komponenten vermeiden.
Empfohlene Maßnahme
Um sicherzustellen, dass die Serialisierung erfolgreich ist, empfehlen wir, dass Sie Ihre gekürzten Anwendungen migrieren, um den Quellgenerator zu verwenden.
Wenn Sie die Reflexion jedoch verwenden müssen, können Sie das ursprüngliche Verhalten rückgängig machen, indem Sie die Eigenschaft JsonSerializerIsReflectionEnabledByDefault in der Projektdatei explizit aktivieren:
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>
Betroffene APIs
–