{"record":{"id":"27b9a4ceddcc288c","repo":"Unity-Technologies/UnityCsReference","slug":"the-build-target-does-not-support-build-appending","errorCode":null,"errorMessage":"The build target does not support build appending.","messagePattern":"The build target does not support build appending\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/BuildPipeline/BuildPipeline.bindings.cs","lineNumber":219,"sourceCode":"            if (isBuildingPlayer)\n                throw new InvalidOperationException(\"Cannot start a new build because there is already a build in progress.\");\n\n            if (buildPlayerOptions.targetGroup == BuildTargetGroup.Unknown)\n                buildPlayerOptions.targetGroup = GetBuildTargetGroup(buildPlayerOptions.target);\n\n            string locationPathNameError;\n            if (!ValidateLocationPathNameForBuildTarget(buildPlayerOptions.locationPathName, buildPlayerOptions.target, buildPlayerOptions.subtarget, buildPlayerOptions.options, out locationPathNameError))\n                throw new ArgumentException(locationPathNameError);\n\n            string scenesError;\n            if (!ValidateScenePaths(buildPlayerOptions.scenes, out scenesError))\n                throw new ArgumentException(scenesError);\n\n            if ((buildPlayerOptions.options & BuildOptions.AcceptExternalModificationsToPlayer) == BuildOptions.AcceptExternalModificationsToPlayer)\n            {\n                CanAppendBuild canAppend = BuildCanBeAppended(buildPlayerOptions.target, buildPlayerOptions.locationPathName);\n                if (canAppend == CanAppendBuild.Unsupported)\n                    throw new InvalidOperationException(\"The build target does not support build appending.\");\n                if (canAppend == CanAppendBuild.No)\n                    throw new InvalidOperationException(\"The build cannot be appended.\");\n            }\n\n            if (buildPlayerOptions.scenes != null)\n            {\n                for (int i = 0; i < buildPlayerOptions.scenes.Length; i++)\n                    buildPlayerOptions.scenes[i] = buildPlayerOptions.scenes[i].Replace('\\\\', '/').Replace(\"//\", \"/\");\n            }\n\n            if ((buildPlayerOptions.options & BuildOptions.Development) == 0)\n            {\n                if ((buildPlayerOptions.options & BuildOptions.AllowDebugging) != 0)\n                {\n                    throw new ArgumentException(\"Non-development build cannot allow debugging. Either add the Development build option, or remove the AllowDebugging build option.\");\n                }\n\n                if ((buildPlayerOptions.options & BuildOptions.EnableCodeCoverage) != 0)","sourceCodeStart":201,"sourceCodeEnd":237,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/BuildPipeline/BuildPipeline.bindings.cs#L201-L237","documentation":"Thrown when BuildPlayer is called with BuildOptions.AcceptExternalModificationsToPlayer and the target platform does not support build appending. This option is designed for platforms that export a gradle/Xcode project for incremental updates (Android, iOS) rather than producing a standalone binary.","triggerScenarios":"Calling BuildPipeline.BuildPlayer with BuildOptions.AcceptExternalModificationsToPlayer set on a platform whose BuildCanBeAppended returns CanAppendBuild.Unsupported — e.g., Standalone (Windows/Mac/Linux), WebGL, or console targets that only produce a final binary.","commonSituations":"A build script originally written for Android export is reused for a Standalone or WebGL target without removing the AcceptExternalModificationsToPlayer flag, or a build automation pipeline applies the same options across all platforms indiscriminately.","solutions":["Only set BuildOptions.AcceptExternalModificationsToPlayer for platforms that support project export (Android, iOS) and omit it for others.","Branch the BuildOptions construction on buildPlayerOptions.target so unsupported targets get a clean binary build.","Remove the flag from the BuildOptions enum combination for the failing target."],"exampleFix":"// before\nvar options = new BuildPlayerOptions\n{\n    options = BuildOptions.AcceptExternalModificationsToPlayer,\n    target = BuildTarget.StandaloneWindows64\n};\nBuildPipeline.BuildPlayer(options);\n\n// after\nBuildOptions opts = BuildOptions.None;\nif (target == BuildTarget.Android || target == BuildTarget.iOS)\n    opts |= BuildOptions.AcceptExternalModificationsToPlayer;\n\nvar options = new BuildPlayerOptions\n{\n    options = opts,\n    target = target\n};\nBuildPipeline.BuildPlayer(options);","handlingStrategy":"validation","validationCode":"BuildOptions SanitizeBuildOptions(BuildOptions options, BuildTarget target)\n{\n    bool supportsAppend = target == BuildTarget.Android || target == BuildTarget.iOS;\n    if (!supportsAppend)\n        options &= ~BuildOptions.AcceptExternalModificationsToPlayer;\n    return options;\n}\n\n// Before BuildPlayer:\noptions.options = SanitizeBuildOptions(options.options, options.target);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only enable AcceptExternalModificationsToPlayer for Android and iOS targets.","Build a platform-specific BuildOptions factory that omits the append flag for unsupported targets.","Document which BuildOptions are platform-specific in your build configuration."],"tags":["unity","build-pipeline","build-append","platform-support","buildplayer"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}