diff --git a/Api/Utility/GameModuleLoader.cs b/Api/Utility/GameModuleLoader.cs index 9ec48fe..a82fdf4 100644 --- a/Api/Utility/GameModuleLoader.cs +++ b/Api/Utility/GameModuleLoader.cs @@ -58,8 +58,8 @@ namespace Milimoe.FunGame.Core.Api.Utility GameModuleLoader loader = new(); if (runtime == FunGameInfo.FunGame.FunGame_Desktop) { - AddonManager.LoadGameModules(loader.Modules, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); AddonManager.LoadGameMaps(loader.Maps, otherobjs); + AddonManager.LoadGameModules(loader.Modules, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); foreach (GameModule module in loader.Modules.Values.ToList()) { // 读取模组的依赖集合 @@ -70,8 +70,8 @@ namespace Milimoe.FunGame.Core.Api.Utility } else if (runtime == FunGameInfo.FunGame.FunGame_Server) { - AddonManager.LoadGameModulesForServer(loader.ModuleServers, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); AddonManager.LoadGameMaps(loader.Maps, otherobjs); + AddonManager.LoadGameModulesForServer(loader.ModuleServers, loader.Characters, loader.Skills, loader.Items, delegates, otherobjs); foreach (GameModuleServer server in loader.ModuleServers.Values.ToList()) { server.GameModuleDepend.GetDependencies(loader); diff --git a/Service/AddonManager.cs b/Service/AddonManager.cs index 2eeba5d..85bda5f 100644 --- a/Service/AddonManager.cs +++ b/Service/AddonManager.cs @@ -33,7 +33,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { // 加载目录下所有的DLL - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Plugin)))) { @@ -71,7 +86,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { // 加载目录下所有的DLL - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(ServerPlugin)))) { @@ -109,7 +139,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { // 加载目录下所有的DLL - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(WebAPIPlugin)))) { @@ -149,7 +194,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => typeof(IAddon).IsAssignableFrom(type))) { @@ -208,7 +268,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => typeof(IAddon).IsAssignableFrom(type))) { @@ -263,7 +338,22 @@ namespace Milimoe.FunGame.Core.Service foreach (string dll in dlls) { - Assembly assembly = Assembly.LoadFrom(dll); + Assembly? assembly = null; + try + { + assembly = Assembly.LoadFrom(dll); + } + catch + { + try + { + assembly = Assembly.Load(Path.GetFileName(dll)); + } + catch + { + continue; + } + } foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(GameMap)))) {