Browse Source

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 <InvariantGlobalization>true</InvariantGlobalization> and <PublishAot>true</PublishAot> .

* Fix handling multiple names with the same prefix

* Add explanation comment
pull/22142/head
AhtenYa 2 weeks ago
committed by GitHub
parent
commit
39f6e55b2e
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      src/Avalonia.Base/Platform/Internal/AssemblyDescriptorResolver.cs

3
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);

Loading…
Cancel
Save