Invoke constructor later

This commit is contained in:
Sardelka
2022-07-28 17:46:34 +08:00
parent 6d5bb285c9
commit 9fda563438

View File

@ -54,6 +54,7 @@ namespace RageCoop.Server.Scripting
Name=dir.Substring(resDir.Length+1).Replace('\\','/') Name=dir.Substring(resDir.Length+1).Replace('\\','/')
});; });;
} }
var assemblies=new Dictionary<ResourceFile,Assembly>();
foreach (var file in Directory.GetFiles(resDir, "*", SearchOption.AllDirectories)) foreach (var file in Directory.GetFiles(resDir, "*", SearchOption.AllDirectories))
{ {
if (ToIgnore.Contains(Path.GetFileName(file))) { try { File.Delete(file); } catch { } continue; } if (ToIgnore.Contains(Path.GetFileName(file))) { try { File.Delete(file); } catch { } continue; }
@ -65,22 +66,26 @@ namespace RageCoop.Server.Scripting
Name=relativeName Name=relativeName
}; };
if (file.EndsWith(".dll") && !relativeName.Contains('/') && IsManagedAssembly(file)) if (file.EndsWith(".dll") && !relativeName.Contains('/') && IsManagedAssembly(file))
{
assemblies.Add(rfile, r.LoadAssemblyFromPath(Path.GetFullPath(file)));
}
r.Files.Add(relativeName, rfile);
}
foreach(var a in assemblies)
{ {
try try
{ {
r.LoadScriptsFromAssembly(rfile, r.LoadAssemblyFromPath(Path.GetFullPath(file))); r.LoadScriptsFromAssembly(a.Key,a.Value);
} }
catch(FileLoadException ex) catch (FileLoadException ex)
{ {
if(!ex.Message.EndsWith("Assembly with same name is already loaded")) if (!ex.Message.EndsWith("Assembly with same name is already loaded"))
{ {
logger?.Warning("Failed to load assembly: "+Path.GetFileName(file)); logger?.Warning("Failed to load assembly: "+a.Key.Name);
logger?.Trace(ex.Message); logger?.Trace(ex.Message);
} }
} }
} }
r.Files.Add(relativeName, rfile);
}
return r; return r;
} }
internal static ServerResource LoadFromZip(string zipPath, string tmpDir, string dataFolder, Logger logger = null) internal static ServerResource LoadFromZip(string zipPath, string tmpDir, string dataFolder, Logger logger = null)