diff --git a/Source/Engine/Engine/NativeInterop.cs b/Source/Engine/Engine/NativeInterop.cs
index 28ac5024d..b4635e0b4 100644
--- a/Source/Engine/Engine/NativeInterop.cs
+++ b/Source/Engine/Engine/NativeInterop.cs
@@ -317,11 +317,16 @@ namespace FlaxEngine.Interop
/// The resolved assembly, or null if none could be found.
internal static Assembly ResolveScriptingAssemblyByName(AssemblyName assemblyName, bool allowPartial = false)
{
- foreach (Assembly assembly in scriptingAssemblyLoadContext.Assemblies)
+ var lc = scriptingAssemblyLoadContext;
+
+ if (lc is null)
+ return null;
+
+ foreach (Assembly assembly in lc.Assemblies)
{
var curName = assembly.GetName();
- if (curName == assemblyName || (allowPartial && curName.Name == assemblyName.Name))
+ if (curName == assemblyName)
return assembly;
}
@@ -329,7 +334,7 @@ namespace FlaxEngine.Interop
{
string partialName = assemblyName.Name;
- foreach (Assembly assembly in scriptingAssemblyLoadContext.Assemblies)
+ foreach (Assembly assembly in lc.Assemblies)
{
var curName = assembly.GetName();
diff --git a/Source/Engine/Serialization/JsonCustomSerializers/ExtendedSerializationBinder.cs b/Source/Engine/Serialization/JsonCustomSerializers/ExtendedSerializationBinder.cs
index 5f976f24f..8199a2bd9 100644
--- a/Source/Engine/Serialization/JsonCustomSerializers/ExtendedSerializationBinder.cs
+++ b/Source/Engine/Serialization/JsonCustomSerializers/ExtendedSerializationBinder.cs
@@ -4,6 +4,7 @@ using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Globalization;
+using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using FlaxEngine.Interop;
@@ -56,13 +57,13 @@ namespace FlaxEngine.Json.JsonCustomSerializers
if (type is null && key.assemblyName is not null) { // Type not found yet, but we have assembly name
Assembly? assembly = null;
- assembly = FindScriptingAssembly(key.assemblyName); // Attempt to load from scripting assembly
+ assembly = FindScriptingAssembly(new(key.assemblyName)); // Attempt to find in scripting assemblies
if (assembly is null)
- assembly = FindLoadedAssembly(key.assemblyName); // Attempt to load from loaded assemblies
+ assembly = FindLoadAssembly(new(key.assemblyName)); // Attempt to load
if (assembly is null)
- assembly = FindUnloadedAssembly(key.assemblyName); // Attempt to load from unloaded assemblies
+ assembly = FindDomainAssembly(new(key.assemblyName)); // Attempt to find in the current domain
if (assembly is null)
throw MakeAsmResolutionException(key.assemblyName); // Assembly failed to resolve
@@ -80,27 +81,35 @@ namespace FlaxEngine.Json.JsonCustomSerializers
}
/// Attempt to find the assembly among loaded scripting assemblies
- Assembly? FindScriptingAssembly(string assemblyName)
+ Assembly? FindScriptingAssembly(AssemblyName assemblyName)
{
- return NativeInterop.ResolveScriptingAssemblyByName(new AssemblyName(assemblyName), allowPartial: true);
+ return NativeInterop.ResolveScriptingAssemblyByName(assemblyName, allowPartial: true);
}
- /// Attempt to find the assembly by name
- Assembly? FindLoadedAssembly(string assemblyName) // TODO
+ /// Attempt to find the assembly in the current domain
+ Assembly? FindDomainAssembly(AssemblyName assemblyName)
{
+ var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToArray();
+
+ foreach (Assembly assembly in assemblies) {
+ var curName = assembly.GetName();
+
+ if (curName == assemblyName || curName.Name == assemblyName.Name)
+ return assembly;
+ }
+
return null;
}
- /// Attempt to find the assembly by name
- Assembly? FindUnloadedAssembly(string assemblyName)
+ /// Attempt to load the assembly
+ Assembly? FindLoadAssembly(AssemblyName assemblyName)
{
Assembly? assembly = null;
- assembly = Assembly.Load(new AssemblyName(assemblyName));
+ assembly = Assembly.Load(assemblyName);
if (assembly is null)
- assembly = Assembly.LoadWithPartialName(assemblyName); // Copying behavior of DefaultSerializationBinder
-
+ assembly = Assembly.LoadWithPartialName(assemblyName.Name); // Copying behavior of DefaultSerializationBinder
return assembly;
}