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
- Upgrade the project in a supported stepwise path: first open it with the intermediate engine version that has a matching upgrader.
- Manually edit the dependency's version in the package/project file to at least PackageMinimumVersion before loading.
- Update or add a custom IPackageUpgrader that supports the old version range.
- 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
- Keep projects on a supported upgrade path (don't skip many major versions).
- Audit dependency versions in .sdpkg files before engine upgrades.
- Add custom IPackageUpgrader implementations for in-house legacy versions.
- Keep backups so a failed upgrade can be rolled back.
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
- Upgrading project [ ] to use [ ] from version [ ] to [ ] is…
- Asset of type has been serialized with newer version , but…
- Asset of type should be updated from version to , but no…
- No upgrader found for version
- Invalid version dependency format. Unable to decode
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)