Added logging for additional plugin loading exceptions.

This commit is contained in:
MapleWheels
2026-04-07 15:43:01 -04:00
parent 7055480015
commit df0a4e62f5
@@ -364,18 +364,35 @@ public class PluginManagementService : IAssemblyManagementService
.Where(al => executionOrder.Contains(al.Key)) .Where(al => executionOrder.Contains(al.Key))
.Where(al => !excludeAlreadyRunningPackages || !_pluginInstances.ContainsKey(al.Key)) .Where(al => !excludeAlreadyRunningPackages || !_pluginInstances.ContainsKey(al.Key))
.SelectMany(al => al.Value.Assemblies.Select(ass => (al.Key, ass))) .SelectMany(al => al.Value.Assemblies.Select(ass => (al.Key, ass)))
.SelectMany(kvp => kvp.ass.GetSafeTypes() .SelectMany<(ContentPackage Key, Assembly ass), (ContentPackage Key, Type type)>(kvp =>
.Where(type => {
type is { IsInterface: false, IsAbstract: false, IsGenericType: false } try
&& type.IsAssignableTo(typeof(IAssemblyPlugin))) {
.Select(type => (kvp.Key, type))) return kvp.ass.GetTypes()
.Where(type =>
type is { IsInterface: false, IsAbstract: false, IsGenericType: false }
&& type.IsAssignableTo(typeof(IAssemblyPlugin)))
.Select(type => (kvp.Key, type));
}
catch (ReflectionTypeLoadException re)
{
results.WithError(new Error($"Failed to get types from Package '{kvp.Key.Name}'"));
results.WithError(new ExceptionalError(re));
}
catch (Exception e)
{
results.WithError(new Error($"Failed to get types from Package '{kvp.Key.Name}'"));
results.WithError(new ExceptionalError(e));
}
return new List<(ContentPackage Key, Type type)>();
})
.GroupBy(kvp => kvp.Key, kvp => kvp.type) .GroupBy(kvp => kvp.Key, kvp => kvp.type)
.OrderBy(exeGrp => executionOrder.IndexOf(exeGrp.Key)) .OrderBy(exeGrp => executionOrder.IndexOf(exeGrp.Key))
.ToImmutableArray(); .ToImmutableArray();
if (toLoad.Length == 0) if (toLoad.Length == 0)
{ {
return FluentResults.Result.Ok(); return results;
} }
_logger.LogMessage($"Activating {nameof(IAssemblyPlugin)} instances"); _logger.LogMessage($"Activating {nameof(IAssemblyPlugin)} instances");
@@ -400,7 +417,7 @@ public class PluginManagementService : IAssemblyManagementService
} }
catch (Exception e) catch (Exception e)
{ {
results.WithError(new ExceptionalError(e)); results.WithError(new ExceptionalError($"Failed to instantiate mod: {packageTypes.Key.Name}", e));
continue; continue;
} }
} }