Release v7.9.7
Enables AOT and trimmer analysis for the Fundamentals package by setting IsAotCompatible=true, then resolves all resulting IL warnings across all target frameworks (net8.0, net9.0, net10.0).
Added
<IsAotCompatible>true</IsAotCompatible>toFundamentals.csproj, enabling IL2026/IL3050/IL2046/IL2057/IL2060/IL2067–IL2075/IL2087/IL2091/IL3051 static analysis
Changed
[RequiresDynamicCode]/[RequiresUnreferencedCode]added to non-virtual public methods that genuinely useMakeGenericType,MakeGenericMethod,Type.GetType(string), or runtime JSON reflection (TypeConversion.Convert,RegisterTypeConvertersForConcepts(Assembly),CountElements,GetKeyValuePairs)[UnconditionalSuppressMessage]applied toJsonConverter.Read/WriteandJsonConverterFactory.CreateConverter/CanConvertoverrides — avoids IL2046/IL3051 cascade since base class signatures carry no matching annotations; bothIL2070andIL2071suppressed since net8.0 emitsIL2070and net9.0/10.0 emitsIL2071for the sameMakeGenericTypepatterns[UnconditionalSuppressMessage]applied to BCL-interface reflection helpers (ImplementsOpenGeneric,GetEnumerableElementType,IsDictionary,GetKeyType,GetValueType, etc.) where interfaces are always runtime-preserved[DynamicallyAccessedMembers(PublicConstructors)]added toTypeConstructorExtensionsmethod parameters, consistent with theirPublicConstructorsaccess patternAddNamingPolicy<T>generic parameter annotated with[DynamicallyAccessedMembers(PublicConstructors)]to satisfy DI registration requirementsHasDefaultConstructorsimplified totype.IsValueType || type.GetConstructors().Any(...), removing a[RequiresDynamicCode]-tagged call toGetTypeInfoDetails()while preserving value-type semantics