{"record":{"id":"a1c80a9c9aaf895b","repo":"Unity-Technologies/UnityCsReference","slug":"unhandled-scripting-backend-scriptingbackend","errorCode":null,"errorMessage":"Unhandled scripting backend {scriptingBackend}","messagePattern":"Unhandled scripting backend (.+?)","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs","lineNumber":397,"sourceCode":"                        return \"unityaot-\" + BuildTargetDiscovery.GetPlatformProfileSuffix(target);\n#pragma warning disable CS0618\n                    case ApiCompatibilityLevel.NET:\n#pragma warning restore CS0618\n                        // We won't need the profile argument going forward.  Dropping this option also acts as an indicator to il2cpp to use the new bcl.\n                        return null;\n\n                    default:\n                        throw new NotSupportedException(string.Format(\"ApiCompatibilityLevel.{0} is not supported!\", compatibilityLevel));\n                }\n            }\n\n            if (scriptingBackend == ScriptingBackend.CoreCLR)\n            {\n                // We won't need the profile argument going forward\n                return null;\n            }\n\n            throw new ArgumentException($\"Unhandled scripting backend {scriptingBackend}\");\n        }\n\n        internal static List<string> GetIL2CPPReferenceDirectories(BuildTarget target, NamedBuildTarget namedTarget,\n            BuildOptions buildOptions, ApiCompatibilityLevel apiCompatibilityLevel)\n        {\n            var result = new List<string>();\n#pragma warning disable CS0618\n            if (apiCompatibilityLevel != ApiCompatibilityLevel.NET)\n#pragma warning restore CS0618\n            {\n                result.Add(BCLExtensions.NetstandardRuntimeDirectory());\n                var profileDirectory = MonoInstallationFinder.GetProfileDirectory(\n                    BuildPipeline.CompatibilityProfileToClassLibFolder(ApiCompatibilityLevel.NET_Standard),\n                    MonoInstallationFinder.MonoBleedingEdgeInstallation);\n                result.Add(profileDirectory);\n                result.Add(Path.Combine(profileDirectory, \"Facades\"));\n                return result;\n            }","sourceCodeStart":379,"sourceCodeEnd":415,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs#L379-L415","documentation":"Thrown by ApiCompatibilityLevelToDotNetProfileArgument when the scripting backend is none of Mono, IL2CPP, or CoreCLR. This is a defensive exhaustiveness check: the method handles exactly three backend branches and throws ArgumentException for anything else, indicating an unhandled or newly introduced ScriptingBackend enum value.","triggerScenarios":"Building with a ScriptingBackend value that is not Mono, IL2CPP, or CoreCLR — e.g., a custom or experimental backend, or a corrupted PlayerSettings.scriptingBackend integer that maps to an invalid enum value.","commonSituations":"Editing ProjectSettings.asset manually and entering an invalid scriptingBackend integer, a Unity version introducing a new ScriptingBackend value not yet handled by this bindings file, or a platform-specific build pipeline setting an experimental backend.","solutions":["Set PlayerSettings.SetScriptingBackend to ScriptingBackend.IL2CPP, ScriptingBackend.Mono, or ScriptingBackend.CoreCLR.","Repair ProjectSettings.scriptingBackend in ProjectSettings.asset to a valid value (0 = IL2CPP, 1 = Mono, 3 = CoreCLR in most Unity versions).","After a Unity upgrade, verify the ScriptingBackend enum hasn't gained new values that require updated bindings."],"exampleFix":"// before\nPlayerSettings.SetScriptingBackend(BuildTargetGroup.Standalone, (ScriptingBackend)42);\n// build throws 'Unhandled scripting backend'\n\n// after\nPlayerSettings.SetScriptingBackend(BuildTargetGroup.Standalone, ScriptingBackend.IL2CPP);","handlingStrategy":"validation","validationCode":"static readonly HashSet<ScriptingBackend> s_validBackends = new()\n{\n    ScriptingBackend.IL2CPP,\n    ScriptingBackend.Mono,\n    ScriptingBackend.CoreCLR\n};\n\nvoid ValidateScriptingBackend(ScriptingBackend backend)\n{\n    if (!s_validBackends.Contains(backend))\n        throw new ArgumentException(\n            $\"ScriptingBackend.{backend} is not handled by this Unity version. \" +\n            \"Use IL2CPP, Mono, or CoreCLR.\");\n}\n\n// Before building:\nValidateScriptingBackend(\n    PlayerSettings.GetScriptingBackend(BuildTargetGroup.Standalone));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never manually edit scriptingBackend in ProjectSettings.asset to an out-of-range integer.","After a Unity upgrade, verify ScriptingBackend enum values haven't changed.","Use PlayerSettings.SetScriptingBackend with named enum values, not raw integers."],"tags":["unity","build-pipeline","il2cpp","scripting-backend","player-settings","exhaustiveness-check"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}