microsoft/aspire · error · InvalidOperationException
Unsupported Aspire skills bundle version comparator
Error message
Unsupported Aspire skills bundle version comparator '{0}'. What it means
Each comparator token in a version range must use one of the supported operators >, >=, <, <=, = or == (or the wildcards *, x, X). After parsing, any comparator with an unrecognized operator causes this formatted InvalidOperationException.
Solutions
- Rewrite caret/tilde ranges into supported comparators, e.g. '^9.0.0' becomes '>=9.0.0 <10.0.0'
- Use only >, >=, <, <=, =, == operators (and *, x, X wildcards) in supports ranges
- Republish the bundle with the corrected range
Example fix
// before
"supports": { "aspireCli": "^9.4.0" }
// after
"supports": { "aspireCli": ">=9.4.0 <10.0.0" } Defensive patterns
Strategy: validation
Validate before calling
var supportedOps = new[] { ">=", "<=", "==", ">", "<", "=", "*", "x", "X" };
foreach (var token in range.Split(' ', ','))
if (token.Length > 0 && !supportedOps.Any(op => token.StartsWith(op)))
throw new InvalidOperationException($"Unsupported comparator '{token}'; use >, >=, <, <=, =, ==."); Try / catch
try
{
await installer.InstallAsync(bundleRef);
}
catch (InvalidOperationException ex) when (ex.Message.Contains("Unsupported Aspire skills bundle version comparator"))
{
logger.LogError(ex, "Range uses an unsupported operator (e.g. '^' or '~'); rewrite with supported comparators.");
} Prevention
- Do not use npm semver caret/tilde syntax in Aspire bundle ranges
- Convert '^9.4.0' to '>=9.4.0 <10.0.0' in authoring templates
- Add a range syntax test to bundle CI
When it happens
Trigger: A range token such as "~9.0.0", "^9", "!=1.0.0", or "9.0.0-alpha"-style bare token without a recognized operator reaches the switch in IsVersionInRange.
Common situations: Authors using npm/semver-style caret or tilde ranges ('^9.0.0', '~9.0') that this parser does not implement, or typos like '=>' or '>>'.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
Related errors
- Aspire skills bundle contains an invalid version comparator
- Aspire skills bundle contains an empty version range.
- Aspire skills bundle contains an invalid version value
- Aspire skills bundle manifest must specify supported Aspire…
- Aspire skills bundle manifest must specify…
AI-assisted analysis of microsoft/aspire@25830f84bd (2026-09-16).
Data as JSON: /api/errors/1c45fd603d959ef4.
Report an issue: GitHub.
Appendix: source
Thrown at src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundleProvider.cs:696
}
return true;
}
private static bool SatisfiesComparator(SemVersion version, string comparator)
{
var (op, operandText) = ParseComparator(comparator);
var operand = ParseCompatibilityVersion(operandText);
var comparison = SemVersion.ComparePrecedence(version, operand);
return op switch
{
">" => comparison > 0,
">=" => comparison >= 0,
"<" => comparison < 0,
"<=" => comparison <= 0,
"=" or "==" => comparison == 0,
_ => throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Unsupported Aspire skills bundle version comparator '{0}'.", op))
};
}
private static (string Operator, string Operand) ParseComparator(string comparator)
{
foreach (var op in new[] { ">=", "<=", "==", ">", "<", "=" })
{
if (comparator.StartsWith(op, StringComparison.Ordinal))
{
var operand = comparator[op.Length..];
if (string.IsNullOrWhiteSpace(operand))
{
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Aspire skills bundle contains an invalid version comparator '{0}'.", comparator));
}
return (op, operand);
}
}View on GitHub (pinned to 25830f84bd)