## Symptom Every compilation under .NET Core logs warnings like this to the Metalama log (e.g. `%LOCALAPPDATA%\Temp\Metalama\Logs\...\Metalama-RoslynCodeAnalysisService-*.log`): ``` WARNING, Thread 10, Serialization: 'System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' is not a known assembly name. ``` ## Cause `BaseCompileTimeSerializationBinder._ourAssemblyVersions` is built from `Assembly.GetReferencedAssemblies()` and keyed by **simple** assembly name: https://github.com/metalama/Metalama/blob/develop/2026.1/Metalama.Framework/src/Metalama.Framework.Engine/CompileTime/Serialization/BaseCompileTimeSerializationBinder.cs#L36 However, `CompileTimeSerializationBinder.BindToType` rewrites the corlib name to a **full** name just before delegating to the base: ```csharp if ( assemblyName.Equals( "mscorlib", StringComparison.Ordinal ) || assemblyName.Equals( "System.Private.CoreLib", StringComparison.Ordinal ) ) { // We have a reference to a system assembly, which is different under .NET Framework and .NET Core. // Replace by the current system assembly. assemblyName = _systemAssemblyName; // typeof(object).Assembly.FullName } ... return base.BindToType( typeName, assemblyName ); ``` A full name can never match a simple-name key, so the lookup always misses and the warning always fires. The base class already anticipates this case, but only for .NET Framework: it suppresses the warning for `assemblyName.StartsWith( "mscorlib, " )` (note the trailing `", "`, which only matches the *full* name produced by the very same rewrite). The .NET Core counterpart `System.Private.CoreLib, ` was never added. ## Impact Cosmetic only: binding still succeeds. With no dictionary entry, `ourAssemblyVersion` keeps the passed-in full name and the code falls through to `Type.GetType( "<typeName>, System.Private.CoreLib, Version=10.0.0.0, ..." )`, which resolves correctly because that *is* the currently loaded corlib. The problem is log noise: one warning per distinct system type bound during deserialization, which masks genuine unknown-assembly cases. ## Suggested fix 1. Minimal, symmetric with the existing intent: extend the suppression condition to also skip names starting with `System.Private.CoreLib, `. 2. Preferable: have `CompileTimeSerializationBinder` stop substituting a full name altogether. Its only purpose is to normalize corlib across frameworks, so it could keep the simple name and let the base resolve it, or short-circuit to `Type.GetType(...)` directly, instead of routing a full name into a simple-name lookup. Option 2 is cleaner since option 1 leaves the underlying simple-vs-full name mismatch in place. — Claude for @gfraiteur