stride3d/stride · critical · InvalidOperationException

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

Error message

Upgrading project [{project.Name}] to use [{dependencyName}] from version [{dependencyVersion}] to [{packageUpgrader.Attribute.UpdatedVersionRange.MinVersion}] is not supported (supported only from version [{packageUpgrader.Attribute.PackageMinimumVersion}]

What it means

During PreLoadPackageDependencies, Stride checks whether a project's package dependency version can be upgraded by the registered IPackageUpgrader. If the current dependency version is older than the upgrader's PackageMinimumVersion, no upgrade path exists and an InvalidOperationException is thrown because the migration cannot be performed safely.

Solutions

  1. Open and upgrade the project incrementally through intermediate engine versions until it reaches a supported version
  2. Update the dependency version manually in the .csproj/.sdpkg to at least PackageMinimumVersion
  3. Register/implement a package upgrader whose PackageMinimumVersion covers the project's version
  4. Restore the project from source control to a supported version

Example fix

// before (project depends on version 3.0.0.0, upgrader supports >= 3.1.0.0)
// session.Load(...); // throws
// after: bump the dependency in the package file first
<Dependency>Stride.Engine;3.1.0.0</Dependency> <!-- then load -->
Defensive patterns

Strategy: try-catch

Validate before calling

// Compare your dependency's VersionRange.MinVersion against the upgrader's minimum before loading
if (dependencyVersion.MinVersion < upgraderAttribute.PackageMinimumVersion)
    logger.Warning("Project too old; upgrade through intermediate versions first");

Try / catch

try { session.Load(...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("is not supported"))
{ logger.Error(ex, "Unsupported version upgrade path"); }

Prevention

When it happens

Trigger: Opening a session/project whose dependency on a package (e.g. Stride engine packages) has a VersionRange.MinVersion below the packageUpgrader.Attribute.PackageMinimumVersion, while the upgrader targets UpdatedVersionRange.

Common situations: Opening a very old Stride/Game Studio project created several major versions back that skips multiple upgrade generations; custom package upgraders with narrow supported ranges.

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/b0ddc018b47c1a88. Report an issue: GitHub.

Appendix: source

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

                var packageUpgrader = AssetRegistry.GetPackageUpgrader(dependencyName);
                if (packageUpgrader != null)
                {
                    // Check if this upgrader has already been added due to another package reference
                    if (pendingPackageUpgrades.Any(pendingPackageUpgrade => pendingPackageUpgrade.PackageUpgrader == packageUpgrader))
                        continue;

                    // Check if upgrade is necessary
                    if (dependencyVersion.MinVersion >= packageUpgrader.Attribute.UpdatedVersionRange.MinVersion)
                    {
                        continue;
                    }

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

                    log.Info($"Upgrading project [{project.Name}] to use [{dependencyName}] from version [{dependencyVersion}] to [{packageUpgrader.Attribute.UpdatedVersionRange.MinVersion}] will be required");

                    pendingPackageUpgrades.Add(new PendingPackageUpgrade(packageUpgrader, new PackageDependency(dependencyName, dependencyVersion), null));
                }
            }

            if (pendingPackageUpgrades.Count > 0)
            {
                var upgradeAllowed = packageUpgradeAllowed != false ? PackageUpgradeRequestedAnswer.Upgrade : PackageUpgradeRequestedAnswer.DoNotUpgrade;

                // Need upgrades, let's ask user confirmation
                if (loadParameters.PackageUpgradeRequested != null && !packageUpgradeAllowed.HasValue)
                {
                    upgradeAllowed = loadParameters.PackageUpgradeRequested(package, pendingPackageUpgrades);
                    if (upgradeAllowed == PackageUpgradeRequestedAnswer.UpgradeAll)
                        packageUpgradeAllowed = true;

View on GitHub (pinned to 96fad776d2)