### Godot version

4.0.beta13

### System information

Mageia 9, Linux

### Issue description

When exporting a trivial .NET project with 4.0.beta13, I get the following error:

```
ERROR: Required virtual method EditorExportPlugin::_get_name must be overridden before calling.
   at: _gdvirtual__get_name_call (editor/export/editor_export_plugin.h:123)
```

It doesn't seem to prevent exporting, but should be fixed anyway.

On the first export attempt (not be reproducible in my MRP, needs to be redone from scratch), it also shows this warning:
```
WARNING: Property not found: dotnet/project/assembly_name
     at: get_setting_with_override (core/config/project_settings.cpp:364)
```
Which likely means that we're using `GLOBAL_GET` before we defined the property with `GLOBAL_DEF`.

### Steps to reproduce

- Create a simple project with a hello world C# script
- Export it from Linux to Linux or Windows (didn't test other combinations, would likely have the same issue)
- Check Output dock / console

### Minimal reproduction project

[TestMono.zip](https://github.com/godotengine/godot/files/10445350/TestMono.zip)
p_script->base_script = base_script;
}
bool CSharpScript::can_instantiate() const {
#ifdef TOOLS_ENABLED
	bool extra_cond = tool || ScriptServer::is_scripting_enabled();
#else
	bool extra_cond = true;
#endif
	 Need to think this through better.
	// For tool scripts, this will never fire if the class is not found. That's because we
	// don't know if it's a tool script if we can't find the class to access the attributes.
	if (extra_cond && !valid) {
		ERR_FAIL_V_MSG(false, "Cannot instance script because the associated class could not be found. Script: '" + get_path() + "'. Make sure the script exists and contains a class definition with a name that matches the filename of the script exactly (it's case-sensitive).");
	}
	return valid && extra_cond;
}
StringName CSharpScript::get_instance_base_type() const {
	StringName native_name;
	GDMonoCache::managed_callbacks.ScriptManagerBridge_GetScriptNativeName(this, &native_name);
	return native_name;
}
CSharpInstance *CSharpScript::_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_is_ref_counted, Callable::CallError &r_error) {
	/* STEP 1, CREATE */
	Ref<RefCounted> ref;
	if (p_is_ref_counted) {
		// Hold it alive. Important if we have to dispose a script instance binding before creating the CSharpInstance.
		ref = Ref<RefCounted>(static_cast<RefCounted *>(p_owner));
	}
	// If the object had a script instance binding, dispose it before adding the CSharpInstance
	if (CSharpLanguage::has_instance_binding(p_owner)) {