修改加载项的加载方式,以解决循环依赖问题

This commit is contained in:
milimoe 2025-01-19 01:33:35 +08:00
parent 7d6ad5bc84
commit 05d1c7204a
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
2 changed files with 98 additions and 8 deletions

View File

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

View File

@ -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))))
{