From 39f6e55b2e5a7d5279ae193019afe489d06203c7 Mon Sep 17 00:00:00 2001 From: AhtenYa <68775649+AhtenYa@users.noreply.github.com> Date: Fri, 4 Sep 2026 06:56:57 +0000 Subject: [PATCH] Fix AssemblyDescriptorResolver.GetAssembly(string name) to not throw CultureNotFoundException (#22137) * Fix AssemblyDescriptorResolver GetAssembly 21517 Fix Avalonia.Platform.Internal.AssemblyDescriptorResolver.GetAssembly(string name) to not throw CultureNotFoundException when true and true . * Fix handling multiple names with the same prefix * Add explanation comment --- .../Platform/Internal/AssemblyDescriptorResolver.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Base/Platform/Internal/AssemblyDescriptorResolver.cs b/src/Avalonia.Base/Platform/Internal/AssemblyDescriptorResolver.cs index 0a23014cac..e71603a3f3 100644 --- a/src/Avalonia.Base/Platform/Internal/AssemblyDescriptorResolver.cs +++ b/src/Avalonia.Base/Platform/Internal/AssemblyDescriptorResolver.cs @@ -26,7 +26,8 @@ internal class AssemblyDescriptorResolver: IAssemblyDescriptorResolver if (!_assemblyNameCache.TryGetValue(name, out var rv)) { var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); - var match = loadedAssemblies.FirstOrDefault(a => name.Equals(a.GetName().Name, StringComparison.InvariantCultureIgnoreCase)); + // Select assembly by ManifestModule.ScopeName instead of GetName().Name to avoid CultureInfo dependency. + var match = loadedAssemblies.Where(a => a.ManifestModule.ScopeName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)).OrderBy(a => a.ManifestModule.ScopeName.Length).FirstOrDefault(); if (match != null) { _assemblyNameCache[name] = rv = new AssemblyDescriptor(match);