Explorar el Código

Fix missing dependencies causing chainloader crash

Bepis hace 7 años
padre
commit
30839f36a2
Se han modificado 1 ficheros con 19 adiciones y 1 borrados
  1. 19 1
      BepInEx/Chainloader.cs

+ 19 - 1
BepInEx/Chainloader.cs

@@ -55,7 +55,25 @@ namespace BepInEx
 
                     BepInLogger.Log($"{pluginTypes.Count} plugins found");
 
-                    pluginTypes = TopologicalSort(pluginTypes, x => TypeLoader.GetDependencies(x, pluginTypes)).ToList();
+                    Dictionary<Type, IEnumerable<Type>> dependencyDict = new Dictionary<Type, IEnumerable<Type>>();
+
+                    foreach (Type t in pluginTypes)
+                    {
+                        try
+                        {
+                            IEnumerable<Type> dependencies = TypeLoader.GetDependencies(t, pluginTypes);
+
+                            dependencyDict[t] = dependencies;
+                        }
+                        catch (MissingDependencyException)
+                        {
+                            var metadata = TypeLoader.GetMetadata(t);
+
+                            BepInLogger.Log($"Cannot load [{metadata.Name}] due to missing dependencies.");
+                        }
+                    }
+
+                    pluginTypes = TopologicalSort(dependencyDict.Keys, x => dependencyDict[x]).ToList();
 
                     foreach (Type t in pluginTypes)
                     {