diff options
| author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2018-01-23 19:49:50 +0200 |
|---|---|---|
| committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2018-01-31 09:20:46 +0200 |
| commit | b3ddf12fb1774d63ac47a8d9890bf017b67d879e (patch) | |
| tree | 42a24d4209427c167c2a8f7f89867a5c2497446e /modules | |
| parent | 20a52aa39db9a6e35738ee486848bd3dd28510cb (diff) | |
| download | redot-engine-b3ddf12fb1774d63ac47a8d9890bf017b67d879e.tar.gz | |
Mono: Allow loading `mscorlib` from resources.
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/mono/mono_gd/gd_mono_assembly.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/modules/mono/mono_gd/gd_mono_assembly.cpp b/modules/mono/mono_gd/gd_mono_assembly.cpp index ba56ed6ed5..ef39b8549d 100644 --- a/modules/mono/mono_gd/gd_mono_assembly.cpp +++ b/modules/mono/mono_gd/gd_mono_assembly.cpp @@ -116,6 +116,37 @@ MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **asse } } + String name = mono_assembly_name_get_name(aname); + bool has_extension = name.ends_with(".dll"); + + if (has_extension ? name == "mscorlib.dll" : name == "mscorlib") { + GDMonoAssembly **stored_assembly = GDMono::get_singleton()->get_loaded_assembly(has_extension ? name.get_basename() : name); + if (stored_assembly) return (*stored_assembly)->get_assembly(); + + String path; + MonoAssembly *res = NULL; + + for (int i = 0; i < search_dirs.size(); i++) { + const String &search_dir = search_dirs[i]; + + if (has_extension) { + path = search_dir.plus_file(name); + if (FileAccess::exists(path)) { + res = _load_assembly_from(name.get_basename(), path); + break; + } + } else { + path = search_dir.plus_file(name + ".dll"); + if (FileAccess::exists(path)) { + res = _load_assembly_from(name, path); + break; + } + } + } + + if (res) return res; + } + return NULL; } |
