using System.Reflection; using System.Runtime.Loader; namespace Ellie.Marmalade; public class MarmaladeAssemblyLoadContext : AssemblyLoadContext { private readonly AssemblyDependencyResolver _resolver; public MarmaladeAssemblyLoadContext(string folderPath) : base(isCollectible: true) => _resolver = new(folderPath); // public Assembly MainAssembly { get; private set; } protected override Assembly? Load(AssemblyName assemblyName) { var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName); if (assemblyPath != null) { var assembly = LoadFromAssemblyPath(assemblyPath); LoadDependencies(assembly); return assembly; } return null; } public void LoadDependencies(Assembly assembly) { foreach (var reference in assembly.GetReferencedAssemblies()) { Load(reference); } } }