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

  1. Rewrite caret/tilde ranges into supported comparators, e.g. '^9.0.0' becomes '>=9.0.0 <10.0.0'
  2. Use only >, >=, <, <=, =, == operators (and *, x, X wildcards) in supports ranges
  3. 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

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


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)