Unity-Technologies/UnityCsReference · error · ArgumentException

Invalid argument provided.

Error message

Invalid argument {0} provided.

What it means

ArgumentException from the CodeOptimization setter's switch: the supplied value is not Debug or Release. The default branch rejects any other CodeOptimization value.

Solutions

  1. Map to CodeOptimization.Debug or CodeOptimization.Release explicitly.
  2. Validate the incoming value before assignment.

Example fix

// before
SetCodeOptimization(userValue);
// after
var v = (userValue == CodeOptimization.Release) ? CodeOptimization.Release : CodeOptimization.Debug;
SetCodeOptimization(v);
Defensive patterns

Strategy: validation

Validate before calling

if (value != CodeOptimization.Debug && value != CodeOptimization.Release)
    throw new ArgumentOutOfRangeException(nameof(value), $"Unsupported CodeOptimization: {value}");

Type guard

static bool IsSupported(CodeOptimization c) =>
    c == CodeOptimization.Debug || c == CodeOptimization.Release;

Prevention

When it happens

Trigger: Assigning a CodeOptimization value other than Debug or Release to the property (e.g. an undefined/None enum member).

Common situations: Passing an uninitialized or newly added CodeOptimization value, or default(CodeOptimization) when that is neither Debug nor Release.

Related errors


AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13). Data as JSON: /api/errors/57553649fb9cb3f1. Report an issue: GitHub.

Appendix: source

Thrown at Editor/Mono/Scripting/ScriptCompilation/CompilationPipeline.cs:280

                }

                switch (value)
                {
                    case CodeOptimization.Debug:
                    {
                        EnableScriptDebugInfo();
                        break;
                    }

                    case CodeOptimization.Release:
                    {
                        DisableScriptDebugInfo();
                        break;
                    }

                    default:
                    {
                        throw new ArgumentException(string.Format("Invalid argument {0} provided.", value.ToString()));
                    }
                }
            }
        }

        internal static bool TryGetLastBuildResult(CompileTarget target, out CompilationDoneResult? lastCompilationDoneResult)
        {
            if (MsBuildCompilationInterface.Instance.TryGetLastBuildResult(target, out var result))
            {
                lastCompilationDoneResult = result;
                return true;
            }

            lastCompilationDoneResult = null;
            return false;
        }

        internal static void ReportBuildFinished(CompileTarget target, CompilationDoneResult compilationDoneResult)

View on GitHub (pinned to 225b0fbdb5)