Unity-Technologies/UnityCsReference · error · InvalidOperationException

The build target does not support build appending.

Error message

The build target does not support build appending.

What it means

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.

Source

Thrown at Editor/Mono/BuildPipeline/BuildPipeline.bindings.cs:219

            if (isBuildingPlayer)
                throw new InvalidOperationException("Cannot start a new build because there is already a build in progress.");

            if (buildPlayerOptions.targetGroup == BuildTargetGroup.Unknown)
                buildPlayerOptions.targetGroup = GetBuildTargetGroup(buildPlayerOptions.target);

            string locationPathNameError;
            if (!ValidateLocationPathNameForBuildTarget(buildPlayerOptions.locationPathName, buildPlayerOptions.target, buildPlayerOptions.subtarget, buildPlayerOptions.options, out locationPathNameError))
                throw new ArgumentException(locationPathNameError);

            string scenesError;
            if (!ValidateScenePaths(buildPlayerOptions.scenes, out scenesError))
                throw new ArgumentException(scenesError);

            if ((buildPlayerOptions.options & BuildOptions.AcceptExternalModificationsToPlayer) == BuildOptions.AcceptExternalModificationsToPlayer)
            {
                CanAppendBuild canAppend = BuildCanBeAppended(buildPlayerOptions.target, buildPlayerOptions.locationPathName);
                if (canAppend == CanAppendBuild.Unsupported)
                    throw new InvalidOperationException("The build target does not support build appending.");
                if (canAppend == CanAppendBuild.No)
                    throw new InvalidOperationException("The build cannot be appended.");
            }

            if (buildPlayerOptions.scenes != null)
            {
                for (int i = 0; i < buildPlayerOptions.scenes.Length; i++)
                    buildPlayerOptions.scenes[i] = buildPlayerOptions.scenes[i].Replace('\\', '/').Replace("//", "/");
            }

            if ((buildPlayerOptions.options & BuildOptions.Development) == 0)
            {
                if ((buildPlayerOptions.options & BuildOptions.AllowDebugging) != 0)
                {
                    throw new ArgumentException("Non-development build cannot allow debugging. Either add the Development build option, or remove the AllowDebugging build option.");
                }

                if ((buildPlayerOptions.options & BuildOptions.EnableCodeCoverage) != 0)

View on GitHub (pinned to 225b0fbdb5)

Solutions

  1. Only set BuildOptions.AcceptExternalModificationsToPlayer for platforms that support project export (Android, iOS) and omit it for others.
  2. Branch the BuildOptions construction on buildPlayerOptions.target so unsupported targets get a clean binary build.
  3. Remove the flag from the BuildOptions enum combination for the failing target.

Example fix

// before
var options = new BuildPlayerOptions
{
    options = BuildOptions.AcceptExternalModificationsToPlayer,
    target = BuildTarget.StandaloneWindows64
};
BuildPipeline.BuildPlayer(options);

// after
BuildOptions opts = BuildOptions.None;
if (target == BuildTarget.Android || target == BuildTarget.iOS)
    opts |= BuildOptions.AcceptExternalModificationsToPlayer;

var options = new BuildPlayerOptions
{
    options = opts,
    target = target
};
BuildPipeline.BuildPlayer(options);
Defensive patterns

Strategy: validation

Validate before calling

BuildOptions SanitizeBuildOptions(BuildOptions options, BuildTarget target)
{
    bool supportsAppend = target == BuildTarget.Android || target == BuildTarget.iOS;
    if (!supportsAppend)
        options &= ~BuildOptions.AcceptExternalModificationsToPlayer;
    return options;
}

// Before BuildPlayer:
options.options = SanitizeBuildOptions(options.options, options.target);

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


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