Assembly loading priority is greedy (probably for performance) and always prefers to use bundled libraries, even if the runtime already provides a better version.
This makes older .NET apps that should roll forward not actually be forward compatible. Newer runtime-provided libraries will be forced to load the app's old bundled dependencies (like System.Diagnostics.DiagnosticSource), which will crash the runtime that requires a newer version with a FileNotFoundException.
For example, consider a typical non-self-contained, single-file app that targets .NET 8 Runtime or greater. When .NET 10 was released, users should have been able to upgrade from .NET 8 Runtime to .NET 10 Runtime without breaking, retargeting, upgrading dependencies in, or recompiling this app. With normal dependencies, such as Microsoft.Extensions.Hosting 9.0.11, this will crash on launch with a FileNotFoundException because the app transitively depends on and bundles packages such as `System.Diagnostics.Diagn