From d0969cc723134f06721293db8e52caa041ec913d Mon Sep 17 00:00:00 2001 From: MapleWheels Date: Wed, 4 Mar 2026 14:38:00 -0500 Subject: [PATCH] - Fixed assembly references not resolving for minor dll signature differences. - Fixed deadlock during assembly resolution. --- .../LuaCs/_Services/PluginManagementService.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PluginManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PluginManagementService.cs index b9cc6d8cb..dd348ff0c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PluginManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PluginManagementService.cs @@ -96,9 +96,9 @@ public class PluginManagementService : IAssemblyManagementService .Union(AssemblyLoadContext.Default.Assemblies .Where(ass => !ass.IsDynamic && - !ass.GetName().FullName.EndsWith("BarotraumaCore") && - !ass.GetName().FullName.EndsWith("Barotrauma") && - !ass.GetName().FullName.EndsWith("DedicatedServer")) + !ass.GetName().FullName.StartsWith("BarotraumaCore") && + !ass.GetName().FullName.StartsWith("Barotrauma") && + !ass.GetName().FullName.StartsWith("DedicatedServer")) .Select(MetadataReference (ass) => MetadataReference.CreateFromFile(ass.Location))) .Where(ar => ar is not null) .ToImmutableArray(); @@ -630,7 +630,8 @@ public class PluginManagementService : IAssemblyManagementService private Assembly OnAssemblyLoaderResolvingManaged(IAssemblyLoaderService requestingLoader, AssemblyName searchName) { - using var lck = _operationsLock.AcquireReaderLock().ConfigureAwait(false).GetAwaiter().GetResult(); + // This method is used during assembly instantiation, we cannot put a lock here. + //using var lck = _operationsLock.AcquireReaderLock().ConfigureAwait(false).GetAwaiter().GetResult(); IService.CheckDisposed(this); foreach (var loader in _assemblyLoaders.Where(kvp => kvp.Value != requestingLoader) @@ -643,7 +644,7 @@ public class PluginManagementService : IAssemblyManagementService foreach (var assembly in loader.Assemblies) { - if (assembly.GetName().Equals(searchName)) + if (assembly.GetName().FullName == searchName.FullName) { return assembly; }