Skip to content

Commit 0b0eae2

Browse files
committed
prioritize packaged assemblies in tools_enabled binaries
--tools_assemblies should only be set if tools_enabled -- setting packaged_assemblies_dir when ANDROID_ENABLED use tools assemblies if TOOLS_ENABLED
1 parent 17fb6e3 commit 0b0eae2

File tree

4 files changed

+33
-17
lines changed

4 files changed

+33
-17
lines changed

modules/mono/csharp_script.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ bool CSharpLanguage::is_assembly_reloading_needed() {
612612
} else {
613613
String assembly_name = Path::get_csharp_project_name();
614614

615-
assembly_path = GodotSharpDirs::get_res_temp_assemblies_dir()
615+
assembly_path = GodotSharpDirs::get_res_assemblies_dir()
616616
.path_join(assembly_name + ".dll");
617617
assembly_path = ProjectSettings::get_singleton()->globalize_path(assembly_path);
618618

modules/mono/godotsharp_dirs.cpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ String _get_mono_user_dir() {
9191
#endif
9292
}
9393

94-
#if !TOOLS_ENABLED
9594
// This should be the equivalent of GodotTools.Utils.OS.PlatformNameMap.
9695
static const char *platform_name_map[][2] = {
9796
{ "Windows", "windows" },
@@ -119,14 +118,15 @@ String _get_platform_name() {
119118

120119
return "";
121120
}
122-
#endif
123121

124122
class _GodotSharpDirs {
125123
public:
126124
String res_metadata_dir;
127125
String res_temp_assemblies_dir;
126+
String packaged_assemblies_dir;
128127
String mono_user_dir;
129128
String api_assemblies_dir;
129+
String tools_assemblies_dir;
130130

131131
#ifdef TOOLS_ENABLED
132132
String build_logs_dir;
@@ -151,9 +151,9 @@ class _GodotSharpDirs {
151151
String res_dir = OS::get_singleton()->get_bundle_resource_dir();
152152

153153
#ifdef TOOLS_ENABLED
154-
String data_dir_root = exe_dir.path_join("GodotSharp");
155-
data_editor_tools_dir = data_dir_root.path_join("Tools");
156-
String api_assemblies_base_dir = data_dir_root.path_join("Api");
154+
String engine_data_dir_root = exe_dir.path_join("GodotSharp");
155+
data_editor_tools_dir = engine_data_dir_root.path_join("Tools");
156+
String api_assemblies_base_dir = engine_data_dir_root.path_join("Api");
157157
build_logs_dir = mono_user_dir.path_join("build_logs");
158158
#ifdef MACOS_ENABLED
159159
if (!DirAccess::exists(data_editor_tools_dir)) {
@@ -164,15 +164,21 @@ class _GodotSharpDirs {
164164
}
165165
#endif
166166
api_assemblies_dir = api_assemblies_base_dir.path_join(GDMono::get_expected_api_build_config());
167-
#else // TOOLS_ENABLED
167+
tools_assemblies_dir = api_assemblies_base_dir.path_join(GDMono::get_expected_api_build_config());
168+
#endif //TOOLS_ENABLED
169+
168170
String platform = _get_platform_name();
169171
String arch = Engine::get_singleton()->get_architecture_name();
170172
String appname_safe = Path::get_csharp_project_name();
171173
String packed_path = "res://.godot/mono/publish/" + arch;
172174
#ifdef ANDROID_ENABLED
173175
api_assemblies_dir = packed_path;
176+
packaged_assemblies_dir = packed_path;
174177
print_verbose(".NET: Android platform detected. Setting api_assemblies_dir directly to pck path: " + api_assemblies_dir);
175-
#else
178+
#else // ANDROID_ENABLED
179+
180+
packaged_assemblies_dir = ProjectSettings::get_singleton()->globalize_path("res://data_" + appname_safe + "_" + platform + "_" + arch);
181+
176182
if (DirAccess::exists(packed_path)) {
177183
// The dotnet publish data is packed in the pck/zip.
178184
String data_dir_root = OS::get_singleton()->get_cache_path().path_join("data_" + appname_safe + "_" + platform + "_" + arch);
@@ -218,7 +224,6 @@ class _GodotSharpDirs {
218224
#endif
219225
api_assemblies_dir = data_dir_root;
220226
}
221-
#endif // ANDROID_ENABLED
222227
#endif
223228
}
224229

@@ -233,8 +238,18 @@ String get_res_metadata_dir() {
233238
return _GodotSharpDirs::get_singleton().res_metadata_dir;
234239
}
235240

236-
String get_res_temp_assemblies_dir() {
237-
return _GodotSharpDirs::get_singleton().res_temp_assemblies_dir;
241+
String get_res_assemblies_dir() {
242+
if (!DirAccess::exists(_GodotSharpDirs::get_singleton().packaged_assemblies_dir)) {
243+
print_verbose(".NET : using engine temporary assemblies");
244+
return _GodotSharpDirs::get_singleton().res_temp_assemblies_dir;
245+
} else {
246+
print_verbose(".NET : using packaged data assemblies");
247+
return _GodotSharpDirs::get_singleton().packaged_assemblies_dir;
248+
}
249+
}
250+
251+
String get_tools_assemblies_dir() {
252+
return _GodotSharpDirs::get_singleton().tools_assemblies_dir;
238253
}
239254

240255
String get_api_assemblies_dir() {

modules/mono/godotsharp_dirs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@
3535
namespace GodotSharpDirs {
3636

3737
String get_res_metadata_dir();
38-
String get_res_temp_assemblies_dir();
38+
String get_res_assemblies_dir();
3939

4040
String get_api_assemblies_dir();
41+
String get_tools_assemblies_dir();
4142

4243
String get_mono_user_dir();
4344

modules/mono/mono_gd/gd_mono.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -430,10 +430,10 @@ godot_plugins_initialize_fn initialize_hostfxr_and_godot_plugins(bool &r_runtime
430430
godot_plugins_initialize_fn godot_plugins_initialize = nullptr;
431431

432432
HostFxrCharString godot_plugins_path = str_to_hostfxr(
433-
GodotSharpDirs::get_api_assemblies_dir().path_join("GodotPlugins.dll"));
433+
GodotSharpDirs::get_tools_assemblies_dir().path_join("GodotPlugins.dll"));
434434

435435
HostFxrCharString config_path = str_to_hostfxr(
436-
GodotSharpDirs::get_api_assemblies_dir().path_join("GodotPlugins.runtimeconfig.json"));
436+
GodotSharpDirs::get_tools_assemblies_dir().path_join("GodotPlugins.runtimeconfig.json"));
437437

438438
load_assembly_and_get_function_pointer_fn load_assembly_and_get_function_pointer =
439439
initialize_hostfxr_for_config(get_data(config_path));
@@ -642,7 +642,7 @@ void GDMono::initialize() {
642642

643643
#if !defined(APPLE_EMBEDDED_ENABLED)
644644
// Check that the .NET assemblies directory exists before trying to use it.
645-
if (!DirAccess::exists(GodotSharpDirs::get_api_assemblies_dir())) {
645+
if (!DirAccess::exists(GodotSharpDirs::get_api_assemblies_dir()) && !DirAccess::exists(GodotSharpDirs::get_tools_assemblies_dir())) {
646646
OS::get_singleton()->alert(vformat(RTR("Unable to find the .NET assemblies directory.\nMake sure the '%s' directory exists and contains the .NET assemblies."), GodotSharpDirs::get_api_assemblies_dir()), RTR(".NET assemblies not found"));
647647
ERR_FAIL_MSG(".NET: Assemblies not found");
648648
}
@@ -745,7 +745,7 @@ void GDMono::_init_godot_api_hashes() {
745745
bool GDMono::_load_project_assembly() {
746746
String assembly_name = Path::get_csharp_project_name();
747747

748-
String assembly_path = GodotSharpDirs::get_res_temp_assemblies_dir()
748+
String assembly_path = GodotSharpDirs::get_res_assemblies_dir()
749749
.path_join(assembly_name + ".dll");
750750
assembly_path = ProjectSettings::get_singleton()->globalize_path(assembly_path);
751751

@@ -775,7 +775,7 @@ void GDMono::reload_failure() {
775775
ERR_PRINT_ED(".NET: Giving up on assembly reloading. Please restart the editor if unloading was failing.");
776776

777777
String assembly_name = Path::get_csharp_project_name();
778-
String assembly_path = GodotSharpDirs::get_res_temp_assemblies_dir().path_join(assembly_name + ".dll");
778+
String assembly_path = GodotSharpDirs::get_res_assemblies_dir().path_join(assembly_name + ".dll");
779779
assembly_path = ProjectSettings::get_singleton()->globalize_path(assembly_path);
780780
project_assembly_path = assembly_path.simplify_path();
781781
project_assembly_modified_time = FileAccess::get_modified_time(assembly_path);

0 commit comments

Comments
 (0)