Jelajahi Sumber

Fix more possible exceptions

Bond-009 6 tahun lalu
induk
melakukan
6973182ade
1 mengubah file dengan 27 tambahan dan 5 penghapusan
  1. 27 5
      Emby.Server.Implementations/ApplicationHost.cs

+ 27 - 5
Emby.Server.Implementations/ApplicationHost.cs

@@ -1181,10 +1181,32 @@ namespace Emby.Server.Implementations
         {
             Logger.LogInformation("Loading assemblies");
 
-            AllConcreteTypes = GetComposablePartAssemblies()
-                .SelectMany(x => x.ExportedTypes)
-                .Where(type => type.IsClass && !type.IsAbstract && !type.IsInterface && !type.IsGenericType)
-                .ToArray();
+            AllConcreteTypes = GetTypes(GetComposablePartAssemblies()).ToArray();
+        }
+
+        private IEnumerable<Type> GetTypes(IEnumerable<Assembly> assemblies)
+        {
+            foreach (var ass in assemblies)
+            {
+                Type[] exportedTypes;
+                try
+                {
+                    exportedTypes = ass.GetExportedTypes();
+                }
+                catch (TypeLoadException ex)
+                {
+                    Logger.LogError(ex, "Error getting exported types from {Assembly}", ass.FullName);
+                    continue;
+                }
+
+                foreach (Type type in exportedTypes)
+                {
+                    if (type.IsClass && !type.IsAbstract && !type.IsInterface && !type.IsGenericType)
+                    {
+                        yield return type;
+                    }
+                }
+            }
         }
 
         private CertificateInfo CertificateInfo { get; set; }
@@ -1353,7 +1375,7 @@ namespace Emby.Server.Implementations
                     {
                         plugAss = Assembly.LoadFrom(file);
                     }
-                    catch (TypeLoadException ex)
+                    catch (FileLoadException ex)
                     {
                         Logger.LogError(ex, "Failed to load assembly {Path}", file);
                         continue;