c#
class ModAssemblyLoadContext : AssemblyLoadContext {
public ModAssemblyLoadContext()
: base("ModAssemblyLoadContext") { }
/// <summary>
/// Returns the main assembly.
/// </summary>
public static Assembly GetMainAssembly(AssemblyLoadContext ctx) {
Assembly? mainAssembly = ctx.Assemblies.FirstOrDefault();
if(mainAssembly == null) {
throw new NullReferenceException("Failed to extract the main assembly");
}
return mainAssembly;
}
/// <summary>
/// Resolves dependencies for a given assembly.
/// </summary>
public static Assembly? ResolveDependencies(AssemblyLoadContext ctx, AssemblyName depAssemblyName) {
string depAssemblyFilename = depAssemblyName.Name + ".dll";
Assembly mainAssembly = GetMainAssembly(ctx);
string mainAssemblyLoadedFrom = Path.GetDirectoryName(mainAssembly.Location);
string depAssemblyPathAlongMainAssembly = Path.Combine(mainAssemblyLoadedFrom, depAssemblyFilename);
if(File.Exists(depAssemblyPathAlongMainAssembly)) {
return Assembly.LoadFrom(depAssemblyPathAlongMainAssembly);
}
return null;
}
}