From 1ae24004d85c42726e680cf53e35682a00b9d327 Mon Sep 17 00:00:00 2001 From: Forgind Date: Wed, 17 Nov 2021 11:56:38 -0800 Subject: [PATCH] Loosen version comparisons in loading assemblies Fixes #6993 --- src/Shared/CoreCLRAssemblyLoader.cs | 6 ++---- src/Shared/MSBuildLoadContext.cs | 24 +++++++++++------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/Shared/CoreCLRAssemblyLoader.cs b/src/Shared/CoreCLRAssemblyLoader.cs index 19b6d03f5d0..060a61a061c 100644 --- a/src/Shared/CoreCLRAssemblyLoader.cs +++ b/src/Shared/CoreCLRAssemblyLoader.cs @@ -164,12 +164,10 @@ private Assembly TryResolveAssemblyFromPaths(AssemblyLoadContext context, Assemb } AssemblyName candidateAssemblyName = AssemblyLoadContext.GetAssemblyName(candidatePath); - if (candidateAssemblyName.Version != assemblyName.Version) + if (candidateAssemblyName.Version >= assemblyName.Version) { - continue; + return LoadAndCache(context, candidatePath); } - - return LoadAndCache(context, candidatePath); } } diff --git a/src/Shared/MSBuildLoadContext.cs b/src/Shared/MSBuildLoadContext.cs index 1de3e06bced..7e3842bbbbd 100644 --- a/src/Shared/MSBuildLoadContext.cs +++ b/src/Shared/MSBuildLoadContext.cs @@ -53,22 +53,20 @@ public MSBuildLoadContext(string assemblyPath) // bare search directory if that fails. : new[] { assemblyName.CultureName, string.Empty }) { - var candidatePath = Path.Combine(_directory, - cultureSubfolder, - $"{assemblyName.Name}.dll"); + var candidatePath = Path.Combine(_directory, + cultureSubfolder, + $"{assemblyName.Name}.dll"); - if (!FileSystems.Default.FileExists(candidatePath)) - { - continue; - } - - AssemblyName candidateAssemblyName = AssemblyLoadContext.GetAssemblyName(candidatePath); - if (candidateAssemblyName.Version != assemblyName.Version) - { - continue; - } + if (!FileSystems.Default.FileExists(candidatePath)) + { + continue; + } + AssemblyName candidateAssemblyName = AssemblyLoadContext.GetAssemblyName(candidatePath); + if (candidateAssemblyName.Version >= assemblyName.Version) + { return LoadFromAssemblyPath(candidatePath); + } } // If the Assembly is provided via a file path, the following rules are used to load the assembly: