diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-02-01 14:36:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-01 14:36:05 +0100 |
commit | 906ac2fc9d079d241aa27bc7588818908acb7310 (patch) | |
tree | 59a85a2f205353295cfe86167eb3476e758bea4b /modules/mono | |
parent | ff287d8341774750b7141f364de1087f48b14699 (diff) | |
parent | b3ddf12fb1774d63ac47a8d9890bf017b67d879e (diff) |
Merge pull request #16002 from bruvzg/mono_loading_form_res
[Mono] Allow loading assemblies (including mscorlib) from resources.
Diffstat (limited to 'modules/mono')
-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; } |