{"record":{"id":"47ac6a64bd7b0e87","repo":"stride3d/stride","slug":"unhandled-value-dependency-type","errorCode":null,"errorMessage":"Unhandled value: {dependency.Type}","messagePattern":"Unhandled value: (.+?)","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"sources/assets/Stride.Core.Assets/PackageCollection.cs","lineNumber":69,"sourceCode":"\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n\n    /// <summary>\n    /// Finds the a package already in this collection from the specified dependency.\n    /// </summary>\n    /// <param name=\"packageDependency\">The package dependency.</param>\n    /// <returns>Package.</returns>\n    public Package? Find(Dependency dependency)\n    {\n        ArgumentNullException.ThrowIfNull(dependency);\n        return dependency.Type switch\n        {\n            DependencyType.Package => Find(dependency.Name, new PackageVersionRange(dependency.Version)),\n            DependencyType.Project => packages.FirstOrDefault(package => package.Meta.Name == dependency.Name && package.Container is SolutionProject),// Project versions might not be properly loaded so we check only by name\n            _ => throw new ArgumentException($\"Unhandled value: {dependency.Type}\"),\n        };\n    }\n\n    /// <summary>\n    /// Finds the a package already in this collection from the specified dependency.\n    /// </summary>\n    /// <param name=\"packageDependency\">The package dependency.</param>\n    /// <returns>Package.</returns>\n    public Package? Find(PackageDependency packageDependency)\n    {\n        ArgumentNullException.ThrowIfNull(packageDependency);\n        return Find(packageDependency.Name, packageDependency.Version);\n    }\n\n    /// <summary>\n    /// Finds a package with the specified name and <see cref=\"PackageVersionRange\"/>.\n    /// </summary>\n    /// <param name=\"name\">The name.</param>","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/assets/Stride.Core.Assets/PackageCollection.cs#L51-L87","documentation":"PackageCollection.Find(dependency) resolves a PackageDependency to a package already present in the collection by switching on dependency.Type. Only Package and Project are handled; any other DependencyType value reaches the switch's throw arm, signaling an unhandled/unknown dependency type.","triggerScenarios":"Calling packages.Find(dependency) (directly or via FindDependencies flows) with a PackageDependency whose Type is neither DependencyType.Package nor DependencyType.Project — e.g. a future/added enum member or a corrupted dependency record.","commonSituations":"Constructing PackageDependency without setting Type (relying on a default that is not handled); deserializing a dependency from a newer package format with an added enum value while running an older library version; typo-level misuse when building dependency lists programmatically.","solutions":["Set dependency.Type explicitly to DependencyType.Package or DependencyType.Project before calling Find.","Inspect the dependency's origin (which package file serialized it) and fix or upgrade the library if the enum value comes from a newer format.","Normalize unknown types to Package when you only need name/version matching, or filter them out before calling Find.","Add a switch guard in caller code: only call Find for the two supported types and log/skip others."],"exampleFix":"// before\nvar dep = new PackageDependency(\"MyGame\"); // Type left at unhandled value\nvar pkg = packages.Find(dep); // throws\n\n// after\ndep.Type = DependencyType.Package;\nvar pkg = packages.Find(dep);","handlingStrategy":"type-guard","validationCode":"if (dependency.Type is not (DependencyType.Package or DependencyType.Project))\n    throw new NotSupportedException($\"Unsupported dependency type: {dependency.Type}\");\nvar pkg = packages.Find(dependency);","typeGuard":"bool IsSupportedDependencyType(PackageDependency d) =>\n    d.Type is DependencyType.Package or DependencyType.Project;","tryCatchPattern":"try { var pkg = packages.Find(dep); }\ncatch (ArgumentException e) when (e.Message.Contains(\"Unhandled value\"))\n{ /* log the unknown DependencyType, skip or upgrade library */ }","preventionTips":["Always set Type explicitly when constructing PackageDependency","Keep library versions in sync with package file formats","Filter dependencies to supported types before resolving"],"tags":["enum","dependency","argument-exception"],"backgroundTag":"invalid-enum-value","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}