From 24a2ae7f3c73903999f8af5fabe9255cf0321e45 Mon Sep 17 00:00:00 2001 From: Ignacio Etcheverry Date: Sun, 10 Feb 2019 18:34:34 +0100 Subject: Do not initialize Mono if 'res://.mono/' and mscorlib are missing This is needed to avoid aborting due to missing mscorlib for projects that do not use C#. If 'res://.mono/' exists, then we assume the project uses C#, in which case a missing mscorlib should still abort. --- modules/mono/mono_gd/gd_mono.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'modules/mono/mono_gd/gd_mono.cpp') diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp index ca1ff9f9ff..b45046cb6d 100644 --- a/modules/mono/mono_gd/gd_mono.cpp +++ b/modules/mono/mono_gd/gd_mono.cpp @@ -253,6 +253,29 @@ void GDMono::initialize() { mono_install_unhandled_exception_hook(&unhandled_exception_hook, NULL); +#ifdef TOOLS_ENABLED + if (!DirAccess::exists("res://.mono")) { + // 'res://.mono/' is missing so there is nothing to load. We don't need to initialize mono, but + // we still do so unless mscorlib is missing (which is the case for projects that don't use C#). + + String mscorlib_fname("mscorlib.dll"); + + Vector search_dirs; + GDMonoAssembly::fill_search_dirs(search_dirs); + + bool found = false; + for (int i = 0; i < search_dirs.size(); i++) { + if (FileAccess::exists(search_dirs[i].plus_file(mscorlib_fname))) { + found = true; + break; + } + } + + if (!found) + return; // mscorlib is missing, do not initialize mono + } +#endif + root_domain = mono_jit_init_version("GodotEngine.RootDomain", "v4.0.30319"); ERR_EXPLAIN("Mono: Failed to initialize runtime"); -- cgit v1.2.3