Unity-Technologies/UnityCsReference · error · ArgumentException
'{standaloneSubtarget}' is not a valid subtarget for the Sta
Error message
'{standaloneSubtarget}' is not a valid subtarget for the Standalone build target What it means
When resolving a NamedBuildTarget for a Standalone target from a subtarget integer, only Player and Server are accepted. Any other StandaloneBuildSubtarget enum value hits the default case and throws ArgumentException.
Source
Thrown at Editor/Mono/BuildPipeline/NamedBuildTarget.cs:192
}
return NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup);
}
internal static NamedBuildTarget FromTargetAndSubtarget(BuildTarget target, int subtarget)
{
var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(target);
if (buildTargetGroup == BuildTargetGroup.Standalone)
{
var standaloneSubtarget = (StandaloneBuildSubtarget)subtarget;
switch (standaloneSubtarget)
{
case StandaloneBuildSubtarget.Player:
return NamedBuildTarget.Standalone;
case StandaloneBuildSubtarget.Server:
return NamedBuildTarget.Server;
default:
throw new ArgumentException($"'{standaloneSubtarget}' is not a valid subtarget for the Standalone build target");
}
}
return NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup);
}
[ExcludeFromDocs]
public static bool operator==(NamedBuildTarget lhs, NamedBuildTarget rhs)
{
return lhs.Equals(rhs);
}
[ExcludeFromDocs]
public static bool operator!=(NamedBuildTarget lhs, NamedBuildTarget rhs)
{
return !lhs.Equals(rhs);
}
View on GitHub (pinned to 225b0fbdb5)
Solutions
- Ensure the subtarget passed is StandaloneBuildSubtarget.Player or StandaloneBuildSubtarget.Server.
- If a new subtarget was added, extend the switch to map it to a NamedBuildTarget.
- Use NamedBuildTarget.FromActiveSettings(target) which derives the correct subtarget from active settings.
Example fix
// before
var nbt = NamedBuildTargetInternal.GetNamedBuildTarget(target, rawSubtarget);
// after
var sub = (StandaloneBuildSubtarget)rawSubtarget;
if (sub != StandaloneBuildSubtarget.Player && sub != StandaloneBuildSubtarget.Server)
throw new ArgumentOutOfRangeException(nameof(rawSubtarget), sub, "Only Player/Server standalone subtargets are supported.");
var nbt = NamedBuildTargetInternal.GetNamedBuildTarget(target, rawSubtarget); Defensive patterns
Strategy: validation
Validate before calling
var sub = (StandaloneBuildSubtarget)subtarget;
if (sub != StandaloneBuildSubtarget.Player && sub != StandaloneBuildSubtarget.Server)
throw new ArgumentOutOfRangeException(nameof(subtarget), sub, "Only Player/Server subtargets are valid for Standalone."); Type guard
static bool IsValidStandaloneSubtarget(int sub) =>
Enum.IsDefined(typeof(StandaloneBuildSubtarget), sub) &&
((StandaloneBuildSubtarget)sub is StandaloneBuildSubtarget.Player or StandaloneBuildSubtarget.Server); Prevention
- Only pass Player or Server subtargets for Standalone builds.
- Use FromActiveSettings(target) to avoid manual subtarget handling.
When it happens
Trigger: Calling the internal GetNamedBuildTarget(target, subtarget) where the target is in the Standalone group and the subtarget integer casts to a StandaloneBuildSubtarget value other than Player (0) or Server (1).
Common situations: A future StandaloneBuildSubtarget enum member added without updating this switch; passing a raw subtarget integer that does not correspond to a valid member; platform extension injecting a custom standalone subtarget.
Related errors
- '{targetName}' is not a valid build target name
- There is no a valid NamedBuildTarget for BuildTargetGroup '{
- Could not map typename 'GameManager' to type info (initializ
- Build profile is invalid.
- Cannot start a new build because there is already a build in
AI-assisted analysis of Unity-Technologies/UnityCsReference@225b0fbdb5 (2026-08-13).
Data as JSON: /api/errors/83b173b4ed91112b.
Report an issue: GitHub.