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
- 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.
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
- 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.
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
- Scene path "{0}" contains invalid directory separators.
- The build cannot be appended.
- Code coverage is unavailable for the selected build target.
- Invalid build path: '{buildPlayerOptions.locationPathName}'.
- Non-development build cannot allow debugging. Either add the
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/27b9a4ceddcc288c.
Report an issue: GitHub.