|
@@ -638,35 +638,41 @@ void CSharpLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft
|
|
#ifdef TOOLS_ENABLED
|
|
#ifdef TOOLS_ENABLED
|
|
void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) {
|
|
void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) {
|
|
|
|
|
|
- if (gdmono->is_runtime_initialized()) {
|
|
|
|
-
|
|
|
|
- GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
|
|
|
|
|
|
+ if (!gdmono->is_runtime_initialized())
|
|
|
|
+ return;
|
|
|
|
|
|
- String name = ProjectSettings::get_singleton()->get("application/config/name");
|
|
|
|
- if (name.empty()) {
|
|
|
|
- name = "UnnamedProject";
|
|
|
|
- }
|
|
|
|
|
|
+ GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
|
|
|
|
|
|
- name += ".dll";
|
|
|
|
|
|
+ String name = ProjectSettings::get_singleton()->get("application/config/name");
|
|
|
|
+ if (name.empty()) {
|
|
|
|
+ name = "UnnamedProject";
|
|
|
|
+ }
|
|
|
|
|
|
- if (proj_assembly) {
|
|
|
|
- String proj_asm_path = proj_assembly->get_path();
|
|
|
|
|
|
+ name += ".dll";
|
|
|
|
|
|
- if (!FileAccess::exists(proj_assembly->get_path())) {
|
|
|
|
- // Maybe it wasn't loaded from the default path, so check this as well
|
|
|
|
- proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name);
|
|
|
|
- if (!FileAccess::exists(proj_asm_path))
|
|
|
|
- return; // No assembly to load
|
|
|
|
- }
|
|
|
|
|
|
+ if (proj_assembly) {
|
|
|
|
+ String proj_asm_path = proj_assembly->get_path();
|
|
|
|
|
|
- if (FileAccess::get_modified_time(proj_asm_path) <= proj_assembly->get_modified_time())
|
|
|
|
- return; // Already up to date
|
|
|
|
- } else {
|
|
|
|
- if (!FileAccess::exists(GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name)))
|
|
|
|
|
|
+ if (!FileAccess::exists(proj_assembly->get_path())) {
|
|
|
|
+ // Maybe it wasn't loaded from the default path, so check this as well
|
|
|
|
+ proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name);
|
|
|
|
+ if (!FileAccess::exists(proj_asm_path))
|
|
return; // No assembly to load
|
|
return; // No assembly to load
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (FileAccess::get_modified_time(proj_asm_path) <= proj_assembly->get_modified_time())
|
|
|
|
+ return; // Already up to date
|
|
|
|
+ } else {
|
|
|
|
+ if (!FileAccess::exists(GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name)))
|
|
|
|
+ return; // No assembly to load
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (!gdmono->get_core_api_assembly() && gdmono->metadata_is_api_assembly_invalidated(APIAssembly::API_CORE))
|
|
|
|
+ return; // The core API assembly to load is invalidated
|
|
|
|
+
|
|
|
|
+ if (!gdmono->get_editor_api_assembly() && gdmono->metadata_is_api_assembly_invalidated(APIAssembly::API_EDITOR))
|
|
|
|
+ return; // The editor API assembly to load is invalidated
|
|
|
|
+
|
|
#ifndef NO_THREADS
|
|
#ifndef NO_THREADS
|
|
lock->lock();
|
|
lock->lock();
|
|
#endif
|
|
#endif
|