stride3d/stride · error · YamlException

Invalid version dependency format. Unable to decode

Error message

Invalid version dependency format. Unable to decode [{0}]

What it means

PackageVersionRangeSerializer.ConvertFrom throws this when a YAML scalar for a package version range cannot be parsed by PackageVersionRange.TryParse. Version range dependencies in packages (e.g. '1.2.x', '>1.0 <2.0') must match the expected range syntax; anything else aborts package deserialization.

Solutions

  1. Rewrite the version range using PackageVersionRange syntax (e.g. '1.2.0', '>=1.0.0 <2.0.0') at the reported line
  2. Simplify the range to a single concrete PackageVersion string to test parsing
  3. Consult existing package files for examples of accepted range formats
  4. If you don't need a range, pin an exact version instead

Example fix

// before
Dependency: mypackage version: latest
// after
Dependency: mypackage version: 1.2.0
Defensive patterns

Strategy: validation

Validate before calling

if (PackageVersionRange.TryParse(rangeText, out var range)) { use(range); } else { fixOrSkip(rangeText); }

Type guard

bool IsValidVersionRange(string? s) => s != null && PackageVersionRange.TryParse(s, out _);

Try / catch

try { LoadPackage(file); } catch (YamlException ex) when (ex.Message.Contains("version dependency format")) { log.Error($"Invalid range in {file}: {ex.Message}"); throw; }

Prevention

When it happens

Trigger: Loading a .pkg or package YAML whose version-dependency range string does not conform to PackageVersionRange syntax: wrong operators, missing version numbers, extra whitespace/characters, or a typo like '>=x.y'.

Common situations: Hand-editing package dependency ranges; copying NuGet-style version specs that Stride's parser does not accept; migration from other package managers with different range grammars.

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 stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/be5ce2b21cb3b511. Report an issue: GitHub.

Appendix: source

Thrown at sources/assets/Stride.Core.Assets/Serializers/PackageVersionRangeSerializer.cs:25

namespace Stride.Core.Assets.Serializers;

/// <summary>
/// A Yaml serializer for <see cref="PackageVersionRange"/>
/// </summary>
[YamlSerializerFactory(YamlAssetProfile.Name)]
internal class PackageVersionRangeSerializer : AssetScalarSerializerBase
{
    public override bool CanVisit(Type type)
    {
        return typeof(PackageVersionRange).IsAssignableFrom(type);
    }

    public override object ConvertFrom(ref ObjectContext context, Scalar fromScalar)
    {
        if (!PackageVersionRange.TryParse(fromScalar.Value, out var versionRange))
        {
            throw new YamlException(fromScalar.Start, fromScalar.End, "Invalid version dependency format. Unable to decode [{0}]".ToFormat(fromScalar.Value));
        }
        return versionRange;
    }

    public override string ConvertTo(ref ObjectContext objectContext)
    {
        return objectContext.Instance.ToString()!;
    }
}

View on GitHub (pinned to 96fad776d2)