Microsoft.Extensions.Caching.Hybrid is not trim/AOT compatible
- Dominant language
- C#
- Stars
- 3.2k
- Forks
- 894
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 23
Description
When analyzing the Microsoft.Extensions.Caching.Hybrid library, we get the following warnings
```
D:\git\extensions\src\Libraries\Microsoft.Extensions.Caching.Hybrid\Internal\DefaultJsonSerializerFactory.cs(26): Trim analysis error IL2026: Microsoft.Extensions.Caching.Hybrid.Internal.DefaultJsonSerializerFactory.DefaultJsonSerializer`1.Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer.Deserialize(ReadOnlySequence`1): Using member 'System.Text.Json.JsonSerializer.Deserialize(Utf8JsonReader&,JsonSerializerOptions)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved. [D:\git\extensions\test\Libraries\Microsoft.Extensions.AotCompatibility.TestApp\Microsoft.Extensions.AotCompatibility.TestApp.csproj]
D:\git\extensions\src\Libraries\Microsoft.Extensions.Caching.Hybrid\Internal\DefaultJsonSerializerFactory.cs(26): AOT analysis error IL3050: Microsoft.Extensions.Caching.Hybrid.Internal.DefaultJsonSerializerFactory.DefaultJsonSerializer`1.Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer.Deserialize(ReadOnlySequence`1): Using member 'System.Text.Json.JsonSerializer.Deserialize(Utf8JsonReader&,JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications. [D:\git\extensions\test\Libraries\Microsoft.Extensions.AotCompatibility.TestApp\Microsoft.Extensions.AotCompatibility.TestApp.csproj]
D:\git\extensions\src\Libraries\Microsoft.Extensions.Caching.Hybrid\Internal\DefaultJsonSerializerFactory.cs(36): Trim analysis error IL2026: Microsoft.Extensions.Caching.Hybrid.Internal.DefaultJsonSerializerFactory.DefaultJsonSerializer`1.Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer.Serialize(T,IBufferWriter`1): Using member 'System.Text.Json.JsonSerializerOptions.Default.get' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved. [D:\git\extensions\test\Libraries\Microsoft.Extensions.AotCompatibility.TestApp\Microsoft.Extensions.AotCompatibility.TestApp.csproj]
D:\git\extensions\src\Libraries\Microsoft.Extensions.Caching.Hybrid\Internal\DefaultJsonSerializerFactory.cs(36): AOT analysis error IL3050: Microsoft.Extensions.Caching.Hybrid.Internal.DefaultJsonSerializerFactory.DefaultJsonSerializer`1.Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer.Serialize(T,IBufferWriter`1): Using member 'System.Text.Json.JsonSerializerOptions.Default.get' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications. [D:\git\extensions\test\Libraries\Microsoft.Extensions.AotCompatibility.TestApp\Microsoft.Extensions.AotCompatibility.TestApp.csproj]
D:\git\extensions\src\Libraries\Microsoft.Extensions.Caching.Hybrid\Internal\DefaultJsonSerializerFactory.cs(36): Trim analysis error IL2026: Microsoft.Extensions.Caching.Hybrid.Internal.DefaultJsonSerializerFactory.DefaultJsonSerializer`1.Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer.Serialize(T,IBufferWriter`1): Using member 'System.Text.Json.JsonSerializer.Serialize(Utf8JsonWriter,T,JsonSerializerOptions)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved. [D:\git\extensions\test\Libraries\Microsoft.Extensions.AotCompatibility.TestApp\Microsoft.Extensions.AotCompatibility.TestApp.csproj]
D:\git\extensions\src\Libraries\Microsoft.Extensions.Caching.Hybrid\Internal\DefaultJsonSerializerFactory.cs(36): AOT analysis error IL3050: Microsoft.Extensions.Caching.Hybrid.Internal.DefaultJsonSerializerFactory.DefaultJsonSerializer`1.Microsoft.Extensions.Caching.Hybrid.IHybridCacheSerializer.Serialize(T,IBufferWriter`1): Using member 'System.Text.Json.JsonSerializer.Serialize(Utf8JsonWriter,T,JsonSerializerOptions)' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications. [D:\git\extensions\test\Libraries\Microsoft.Extensions.AotCompatibility.TestApp\Microsoft.Extensions.AotCompatibility.TestApp.csproj]
```
See
https://github.com/dotnet/extensions/blob/d42d3e58c55e02134fb2c50379422794f2f17bb4/src/Libraries/Microsoft.Extensions.Caching.Hybrid/Internal/DefaultJsonSerializerFactory.cs#L19-L39
These suppressions are not valid. We need to ensure this library is trim/AOT compatible so people can use it in native AOT applications.
cc @mgravell
Contributor guide
Assessment
This issue has not been assessed yet.