@@ -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.
9695static const char *platform_name_map[][2 ] = {
9796 { " Windows" , " windows" },
@@ -119,14 +118,15 @@ String _get_platform_name() {
119118
120119 return " " ;
121120}
122- #endif
123121
124122class _GodotSharpDirs {
125123public:
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
240255String get_api_assemblies_dir () {
0 commit comments