diff --git a/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoHandler.cs b/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoHandler.cs index c208931a1..d22281b35 100644 --- a/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoHandler.cs +++ b/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoHandler.cs @@ -93,7 +93,7 @@ private static unsafe void InitializeManaged() foreach (var dll in Directory.EnumerateFiles(overridesDir, "*.dll")) { MelonDebug.Log("Loading assembly: " + dll); - if (Mono.DomainAssemblyOpen(Domain, dll) == 0) + if (Mono.TryLoadAssemblyUnicode(Domain, dll) == 0) MelonDebug.Log("Assembly failed to load!"); } } @@ -101,7 +101,7 @@ private static unsafe void InitializeManaged() } MelonDebug.Log("Loading ML assembly"); - var assembly = Mono.DomainAssemblyOpen(Domain, mlPath); + var assembly = Mono.TryLoadAssemblyUnicode(Domain, mlPath); if (assembly == 0) { Core.Logger.Error($"Failed to load the Mono MelonLoader assembly"); diff --git a/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoLib.cs b/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoLib.cs index 0692bbb09..cce021444 100644 --- a/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoLib.cs +++ b/MelonLoader.Bootstrap/RuntimeHandlers/Mono/MonoLib.cs @@ -118,6 +118,20 @@ internal class MonoLib }; } + public nint TryLoadAssemblyUnicode(nint domain, string path) + { + if (!File.Exists(path)) + return 0; + + var dir = Path.GetDirectoryName(path)!; + var prevCwd = Directory.GetCurrentDirectory(); + + Directory.SetCurrentDirectory(dir); + var asm = DomainAssemblyOpen(domain, Path.GetFileName(path)); + Directory.SetCurrentDirectory(prevCwd); + return asm; + } + private static string? FindMonoPath(string searchDir) { foreach (var folder in folderNames)