| Description |
- Repro: Build a Unity Dedicated Server player (
StandaloneLinux64 + Server subtarget, IL2CPP) that excludes the Noesis native plugin (libNoesis.so) from the build — correct, since a headless server draws no UI. Boot the server.
- Result:
DllNotFoundException('Noesis') at every process boot, before any scene loads. (For us that's roughly one exception per match-container start, captured by server-side crash reporting.)
- Diagnosis:
NoesisUnity auto-initializes from a [RuntimeInitializeOnLoadMethod(BeforeSplashScreen)] hook that runs on every build. Its Init → SetLicense → Noesis.GUI.SetLicense path P/Invokes the native library unconditionally — there is no check for "native plugin not present in this build." Because the throw fires pre-scene, nothing scene-placed can prevent it.
- Relation to the accepted bug: this is the runtime sibling of the accepted
NoesisLangServer loop bug — same disease (no native-absent guard), different entry point (runtime auto-init vs editor update tick). The accepted editor-side fix does not cover this site.
- Why it's legitimate, not "gate it yourself": the consumer did gate it — the plugin is deliberately stripped because the server has no use for UI. The defect is that Noesis's own auto-init can't tolerate its own plugin being absent. A library increasingly used for server-authoritative multiplayer should boot cleanly on a headless build.
- Severity: Medium (non-fatal per boot, but multiplied across many short-lived match containers it pollutes server crash reporting and buries genuine faults).
- Unblocks dropping workaround: we currently wrap the auto-init call site in
#if !UNITY_SERVER in the vendored package. A built-in headless/native-absent guard (detect-once, disable) lets us delete that source patch.
|
|---|