Merge pull request #78220 from raulsntos/dotnet/reserved-assembly-name-3.x

[3.x] C#: Avoid GodotSharp as project assembly name
This commit is contained in:
Rémi Verschelde 2023-06-15 15:55:19 +02:00
commit 9ba9a41766
No known key found for this signature in database
GPG Key ID: C3336907360768E1
9 changed files with 33 additions and 55 deletions

View File

@ -47,9 +47,6 @@
<member name="process_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled" default="false">
If [code]true[/code], the parent's [method Node._process] will be stopped.
</member>
<member name="visibility_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled" default="true">
If [code]true[/code] and the parent is a [CanvasItem], the parent will be hidden.
</member>
</members>
<constants>
<constant name="ENABLER_PAUSE_ANIMATIONS" value="0" enum="Enabler">
@ -70,9 +67,7 @@
<constant name="ENABLER_PAUSE_ANIMATED_SPRITES" value="5" enum="Enabler">
This enabler will stop [AnimatedSprite] nodes animations.
</constant>
<constant name="ENABLER_PARENT_VISIBILITY" value="6" enum="Enabler">
</constant>
<constant name="ENABLER_MAX" value="7" enum="Enabler">
<constant name="ENABLER_MAX" value="6" enum="Enabler">
Represents the size of the [enum Enabler] enum.
</constant>
</constants>

View File

@ -59,6 +59,7 @@
#include "mono_gd/gd_mono_utils.h"
#include "signal_awaiter_utils.h"
#include "utils/macros.h"
#include "utils/path_utils.h"
#include "utils/string_utils.h"
#include "utils/thread_local.h"
@ -721,16 +722,7 @@ bool CSharpLanguage::is_assembly_reloading_needed() {
GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
String appname = ProjectSettings::get_singleton()->get("application/config/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;
}
String assembly_name = path::get_csharp_project_name();
assembly_name += ".dll";

View File

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

View File

@ -44,6 +44,7 @@
#endif
#include "mono_gd/gd_mono.h"
#include "utils/path_utils.h"
namespace GodotSharpDirs {
@ -149,15 +150,9 @@ private:
GLOBAL_DEF_RST("mono/project/solution_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");
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);
}

View File

@ -987,13 +987,7 @@ bool GDMono::_load_project_assembly() {
if (project_assembly)
return true;
String assembly_name = ProjectSettings::get_singleton()->get("mono/project/assembly_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;
}
String assembly_name = path::get_csharp_project_name();
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);
}
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

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 get_csharp_project_name();
} // namespace path
#endif // MONO_PATH_UTILS_H

View File

@ -168,13 +168,6 @@ void VisibilityEnabler2D::_screen_enter() {
if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) {
get_parent()->set_process(true);
}
if (enabler[ENABLER_PARENT_VISIBILITY] && get_parent()) {
CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent());
if (ci) {
ci->set_visible(true);
}
}
visible = true;
}
@ -190,13 +183,6 @@ void VisibilityEnabler2D::_screen_exit() {
if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) {
get_parent()->set_process(false);
}
if (enabler[ENABLER_PARENT_VISIBILITY] && get_parent()) {
CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent());
if (ci) {
ci->set_visible(false);
}
}
visible = false;
}
@ -279,14 +265,6 @@ void VisibilityEnabler2D::_notification(int p_what) {
get_parent()->connect(SceneStringNames::get_singleton()->ready,
get_parent(), "set_process", varray(false), CONNECT_REFERENCE_COUNTED);
}
if (enabler[ENABLER_PARENT_VISIBILITY] && get_parent()) {
CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent());
if (ci) {
ci->connect(SceneStringNames::get_singleton()->ready,
ci, "set_visible", varray(false), CONNECT_REFERENCE_COUNTED);
}
}
}
if (p_what == NOTIFICATION_EXIT_TREE) {
@ -377,7 +355,6 @@ void VisibilityEnabler2D::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "pause_animated_sprites"), "set_enabler", "is_enabler_enabled", ENABLER_PAUSE_ANIMATED_SPRITES);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_PROCESS);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "physics_process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_PHYSICS_PROCESS);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "visibility_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_VISIBILITY);
BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATIONS);
BIND_ENUM_CONSTANT(ENABLER_FREEZE_BODIES);
@ -385,7 +362,6 @@ void VisibilityEnabler2D::_bind_methods() {
BIND_ENUM_CONSTANT(ENABLER_PARENT_PROCESS);
BIND_ENUM_CONSTANT(ENABLER_PARENT_PHYSICS_PROCESS);
BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATED_SPRITES);
BIND_ENUM_CONSTANT(ENABLER_PARENT_VISIBILITY);
BIND_ENUM_CONSTANT(ENABLER_MAX);
}

View File

@ -78,7 +78,6 @@ public:
ENABLER_PARENT_PROCESS,
ENABLER_PARENT_PHYSICS_PROCESS,
ENABLER_PAUSE_ANIMATED_SPRITES,
ENABLER_PARENT_VISIBILITY,
ENABLER_MAX
};