Los proyectos PublishedTrimmed producen un error en la serialización basada en la reflexión
Los proyectos que habilitan la propiedad PublishTrimmed MSBuild ahora desactivan automáticamente los valores predeterminados basados en la reflexión de System.Text.Json. En otras palabras, establecer PublishTrimmed
en true
establece automáticamente la propiedad JsonSerializerIsReflectionEnabledByDefault
MSBuild en false
a menos que se especifique lo contrario en la configuración del proyecto.
Comportamiento anterior
Antes de este cambio, los proyectos que tienen habilitada la propiedad PublishTrimmed
, es decir, <PublishTrimmed>true</PublishTrimmed>
, publicaron una aplicación recortada. Sin embargo, el comportamiento de serialización predeterminada basado en reflexión no estaba necesariamente deshabilitado. En función del código que se haya recortado, el código siguiente podría o no ser correcto serializarlo, o podría o no generar los datos de serialización correctos.
JsonSerializer.Serialize(new { Value = 42 });
Comportamiento nuevo
A partir de .NET 8, los proyectos que tienen habilitada la propiedad PublishTrimmed
no se serializarán correctamente. El código JsonSerializer.Serialize(new { Value = 42 });
produce la siguiente excepción:
System.InvalidOperationException: la serialización basada en reflexión se ha deshabilitado para esta aplicación.
Versión introducida
.NET 8 Versión preliminar 7
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
Este cambio garantiza que las aplicaciones recortadas usen los valores predeterminados adecuados. También guía a los usuarios hacia la adopción de procedimientos recomendados adecuados para aplicaciones recortadas, es decir, usar el generador de origen y evitar dependencias accidentales en los componentes no seguros basados en reflexión.
Acción recomendada
Para asegurarse de que la serialización tenga éxito, se recomienda migrar las aplicaciones recortadas para usar el generador de origen.
Sin embargo, si debe usar la reflexión, puede revertir al comportamiento original habilitando explícitamente la propiedad JsonSerializerIsReflectionEnabledByDefault
en el archivo del proyecto:
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>
API afectadas
N/D