stride3d/stride · error · InvalidOperationException

Upgrading package [ ] to use [ ] from version [ ] to [ ] is…

Error message

Upgrading package [{dependentPackage.Meta.Name}] to use [{dependencyPackage.Meta.Name}] from version [{dependentPackagePreviousMinimumVersion}] to [{dependencyPackage.Meta.Version}] is not supported

What it means

Thrown during package upgrade analysis when a dependency's version is below the minimum version required by the applicable IPackageUpgrader, meaning the upgrade cannot be performed automatically. The session aborts rather than producing a package with an unsupported dependency version.

Solutions

  1. Upgrade the project in a supported stepwise path: first open it with the intermediate engine version that has a matching upgrader.
  2. Manually edit the dependency's version in the package/project file to at least PackageMinimumVersion before loading.
  3. Update or add a custom IPackageUpgrader that supports the old version range.
  4. Restore a newer backup of the project where dependencies were already upgraded.

Example fix

// before (old .sdpkg dependency)
<Version>3.0.0.1</Version>
// after — bump the dependency to the minimum supported version
<Version>4.1.0.2</Version>
Defensive patterns

Strategy: try-catch

Validate before calling

if (dependency.Version.MinVersion < requiredMinimumVersion)
    log.Warn($"Dependency {dependencyPackage.Meta.Name} v{dependency.Version} needs manual upgrade to >= {requiredMinimumVersion}");

Try / catch

try { session.UpgradePackage(...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("is not supported"))
{
    // fall back to stepwise upgrade with an older engine version or manual edit
}

Prevention

When it happens

Trigger: Calling PackageSession upgrade flows on a package whose dependency Version.MinVersion is lower than packageUpgrader.Attribute.PackageMinimumVersion.

Common situations: Opening an old project created with a much earlier engine version; a referenced dependency package predates the minimum supported version; skipping multiple major versions so no upgrader path exists.

Understand the failure class

Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.

Related errors


AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/cec1938bd7b04087. Report an issue: GitHub.

Appendix: source

Thrown at sources/assets/Stride.Core.Assets/PackageSession.cs:1734

        var dependentPackagePreviousMinimumVersion = dependency.Version.MinVersion;
        if (dependencyPackage.Meta.Version > dependentPackagePreviousMinimumVersion)
        {
            // Find upgrader for given package
            // Note: If no upgrader is found, we assume it is still compatible with previous versions, so do nothing
            var packageUpgrader = AssetRegistry.GetPackageUpgrader(dependencyPackage.Meta.Name);
            if (packageUpgrader is not null)
            {
                // Check if upgrade is necessary
                if (dependency.Version.MinVersion >= packageUpgrader.Attribute.UpdatedVersionRange.MinVersion)
                {
                    return null;
                }

                // Check if upgrade is allowed
                if (dependency.Version.MinVersion < packageUpgrader.Attribute.PackageMinimumVersion)
                {
                    // Throw an exception, because the package update is not allowed and can't be done
                    throw new InvalidOperationException($"Upgrading package [{dependentPackage.Meta.Name}] to use [{dependencyPackage.Meta.Name}] from version [{dependentPackagePreviousMinimumVersion}] to [{dependencyPackage.Meta.Version}] is not supported");
                }

                log.Info($"Upgrading package [{dependentPackage.Meta.Name}] to use [{dependencyPackage.Meta.Name}] from version [{dependentPackagePreviousMinimumVersion}] to [{dependencyPackage.Meta.Version}] will be required");
                return packageUpgrader;
            }
        }

        return null;
    }

    public class PendingPackageUpgrade : IEquatable<PendingPackageUpgrade>
    {
        public readonly PackageUpgrader PackageUpgrader;
        public readonly PackageDependency Dependency;
        public readonly Package DependencyPackage;
        public readonly PackageVersionRange DependencyVersionBeforeUpgrade;

        public PendingPackageUpgrade(PackageUpgrader packageUpgrader, PackageDependency dependency, Package dependencyPackage)

View on GitHub (pinned to 96fad776d2)