From 9fda56343833bec064dba8e62860b7cc12a94aed Mon Sep 17 00:00:00 2001 From: Sardelka Date: Thu, 28 Jul 2022 17:46:34 +0800 Subject: [PATCH] Invoke constructor later --- RageCoop.Server/Scripting/ServerResource.cs | 29 ++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/RageCoop.Server/Scripting/ServerResource.cs b/RageCoop.Server/Scripting/ServerResource.cs index e19e87e..97087a8 100644 --- a/RageCoop.Server/Scripting/ServerResource.cs +++ b/RageCoop.Server/Scripting/ServerResource.cs @@ -54,6 +54,7 @@ namespace RageCoop.Server.Scripting Name=dir.Substring(resDir.Length+1).Replace('\\','/') });; } + var assemblies=new Dictionary(); foreach (var file in Directory.GetFiles(resDir, "*", SearchOption.AllDirectories)) { if (ToIgnore.Contains(Path.GetFileName(file))) { try { File.Delete(file); } catch { } continue; } @@ -66,21 +67,25 @@ namespace RageCoop.Server.Scripting }; if (file.EndsWith(".dll") && !relativeName.Contains('/') && IsManagedAssembly(file)) { - try - { - r.LoadScriptsFromAssembly(rfile, r.LoadAssemblyFromPath(Path.GetFullPath(file))); - } - catch(FileLoadException ex) - { - if(!ex.Message.EndsWith("Assembly with same name is already loaded")) - { - logger?.Warning("Failed to load assembly: "+Path.GetFileName(file)); - logger?.Trace(ex.Message); - } - } + assemblies.Add(rfile, r.LoadAssemblyFromPath(Path.GetFullPath(file))); } r.Files.Add(relativeName, rfile); } + foreach(var a in assemblies) + { + try + { + r.LoadScriptsFromAssembly(a.Key,a.Value); + } + catch (FileLoadException ex) + { + if (!ex.Message.EndsWith("Assembly with same name is already loaded")) + { + logger?.Warning("Failed to load assembly: "+a.Key.Name); + logger?.Trace(ex.Message); + } + } + } return r; } internal static ServerResource LoadFromZip(string zipPath, string tmpDir, string dataFolder, Logger logger = null)