Ported from godot: C#: Avoid GodotSharp as project assembly name

The name GodotSharp conflicts with the name of the Godot assembly,
this causes the project assembly to be ignored.
- raulsntos
06c0a1abc9
This commit is contained in:
Relintai 2023-06-28 20:46:22 +02:00
parent d3264520af
commit 6cce16de89
6 changed files with 32 additions and 24 deletions

View File

@ -60,6 +60,7 @@
#include "mono_gd/gd_mono_utils.h" #include "mono_gd/gd_mono_utils.h"
#include "signal_awaiter_utils.h" #include "signal_awaiter_utils.h"
#include "utils/macros.h" #include "utils/macros.h"
#include "utils/path_utils.h"
#include "utils/string_utils.h" #include "utils/string_utils.h"
#include "utils/thread_local.h" #include "utils/thread_local.h"
@ -739,16 +740,7 @@ bool CSharpLanguage::is_assembly_reloading_needed() {
GDMonoAssembly *proj_assembly = gdmono->get_project_assembly(); GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
String appname = ProjectSettings::get_singleton()->get("application/config/name"); String assembly_name = path::get_csharp_project_name();
String assembly_name = ProjectSettings::get_singleton()->get_setting("mono/project/assembly_name");
if (assembly_name.empty()) {
String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
if (appname_safe.empty()) {
appname_safe = "UnnamedProject";
}
assembly_name = appname_safe;
}
assembly_name += ".dll"; assembly_name += ".dll";

View File

@ -77,6 +77,12 @@ namespace GodotTools.Core
foreach (string invalidChar in invalidChars) foreach (string invalidChar in invalidChars)
safeDirName = safeDirName.Replace(invalidChar, "-"); safeDirName = safeDirName.Replace(invalidChar, "-");
// Avoid reserved names that conflict with Godot assemblies
if (safeDirName == "GodotSharp" || safeDirName == "GodotSharpEditor")
{
safeDirName += "_";
}
return safeDirName; return safeDirName;
} }
} }

View File

@ -44,6 +44,7 @@
#endif #endif
#include "mono_gd/gd_mono.h" #include "mono_gd/gd_mono.h"
#include "utils/path_utils.h"
namespace GodotSharpDirs { namespace GodotSharpDirs {
@ -149,15 +150,9 @@ private:
GLOBAL_DEF_RST("mono/project/solution_directory", ""); GLOBAL_DEF_RST("mono/project/solution_directory", "");
GLOBAL_DEF_RST("mono/project/c#_project_directory", ""); GLOBAL_DEF_RST("mono/project/c#_project_directory", "");
String appname = ProjectSettings::get_singleton()->get("application/config/name");
String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
if (appname_safe.empty()) {
appname_safe = "UnnamedProject";
}
project_assembly_name = ProjectSettings::get_singleton()->get("mono/project/assembly_name"); project_assembly_name = ProjectSettings::get_singleton()->get("mono/project/assembly_name");
if (project_assembly_name.empty()) { if (project_assembly_name.empty()) {
project_assembly_name = appname_safe; project_assembly_name = path::get_csharp_project_name();
ProjectSettings::get_singleton()->set("mono/project/assembly_name", project_assembly_name); ProjectSettings::get_singleton()->set("mono/project/assembly_name", project_assembly_name);
} }

View File

@ -987,13 +987,7 @@ bool GDMono::_load_project_assembly() {
if (project_assembly) if (project_assembly)
return true; return true;
String assembly_name = ProjectSettings::get_singleton()->get("mono/project/assembly_name"); String assembly_name = path::get_csharp_project_name();
if (assembly_name.empty()) {
String appname = ProjectSettings::get_singleton()->get("application/config/name");
String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
assembly_name = appname_safe;
}
bool success = load_assembly(assembly_name, &project_assembly); bool success = load_assembly(assembly_name, &project_assembly);

View File

@ -208,4 +208,23 @@ String relative_to(const String &p_path, const String &p_relative_to) {
return relative_to_impl(path_abs_norm, relative_to_abs_norm); return relative_to_impl(path_abs_norm, relative_to_abs_norm);
} }
String get_csharp_project_name() {
String name = GLOBAL_GET("mono/project/assembly_name");
if (name.empty()) {
name = GLOBAL_GET("application/config/name");
name = OS::get_singleton()->get_safe_dir_name(name);
}
if (name.empty()) {
name = "UnnamedProject";
}
// Avoid reserved names that conflict with Godot assemblies.
if (name == "GodotSharp" || name == "GodotSharpEditor") {
name += "_";
}
return name;
}
} // namespace path } // namespace path

View File

@ -59,6 +59,8 @@ String realpath(const String &p_path);
String relative_to(const String &p_path, const String &p_relative_to); String relative_to(const String &p_path, const String &p_relative_to);
String get_csharp_project_name();
} // namespace path } // namespace path
#endif // MONO_PATH_UTILS_H #endif // MONO_PATH_UTILS_H