Преглед на файлове

Merge pull request #30820 from neikeq/issue-28394

Mono: Don't try to update project assemblies from project manager
Ignacio Roldán Etcheverry преди 6 години
родител
ревизия
3a68b24171
променени са 1 файла, в които са добавени 22 реда и са изтрити 2 реда
  1. 22 2
      modules/mono/mono_gd/gd_mono.cpp

+ 22 - 2
modules/mono/mono_gd/gd_mono.cpp

@@ -657,7 +657,14 @@ bool GDMono::_load_core_api_assembly() {
 
 #ifdef TOOLS_ENABLED
 	// For the editor and the editor player we want to load it from a specific path to make sure we can keep it up to date
-	String assembly_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(CORE_API_ASSEMBLY_NAME ".dll");
+
+	// If running the project manager, load it from the prebuilt API directory
+	String assembly_dir = !Main::is_project_manager() ?
+								  GodotSharpDirs::get_res_assemblies_dir() :
+								  GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file("Debug");
+
+	String assembly_path = assembly_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll");
+
 	bool success = FileAccess::exists(assembly_path) &&
 				   load_assembly_from(CORE_API_ASSEMBLY_NAME, assembly_path, &core_api_assembly);
 #else
@@ -688,7 +695,14 @@ bool GDMono::_load_editor_api_assembly() {
 		return true;
 
 	// For the editor and the editor player we want to load it from a specific path to make sure we can keep it up to date
-	String assembly_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(EDITOR_API_ASSEMBLY_NAME ".dll");
+
+	// If running the project manager, load it from the prebuilt API directory
+	String assembly_dir = !Main::is_project_manager() ?
+								  GodotSharpDirs::get_res_assemblies_dir() :
+								  GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file("Debug");
+
+	String assembly_path = assembly_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll");
+
 	bool success = FileAccess::exists(assembly_path) &&
 				   load_assembly_from(EDITOR_API_ASSEMBLY_NAME, assembly_path, &editor_api_assembly);
 
@@ -740,6 +754,12 @@ void GDMono::_load_api_assemblies() {
 		// The API assemblies are out of sync. Fine, try one more time, but this time
 		// update them from the prebuilt assemblies directory before trying to load them.
 
+		// Shouldn't happen. The project manager loads the prebuilt API assemblies
+		if (Main::is_project_manager()) {
+			ERR_EXPLAIN("Failed to load one of the prebuilt API assemblies");
+			CRASH_NOW();
+		}
+
 		// 1. Unload the scripts domain
 		if (_unload_scripts_domain() != OK) {
 			ERR_EXPLAIN("Mono: Failed to unload scripts domain");