{"record":{"id":"23450a1d1014a894","repo":"Unity-Technologies/UnityCsReference","slug":"given-path-is-not-valid-path","errorCode":null,"errorMessage":"Given path is not valid: '{path}'","messagePattern":"Given path is not valid: '(.+?)'","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/Prefabs/PrefabUtility.bindings.cs","lineNumber":244,"sourceCode":"        {\n            if (assetRoot == null)\n                throw new ArgumentNullException(\"The inputObject is null\");\n\n            if (!IsPartOfPrefabAsset(assetRoot))\n                throw new ArgumentException(\"Given input object is not a prefab asset\");\n\n            if (assetRoot.transform.root.gameObject != assetRoot)\n                throw new ArgumentException(\"Object to create variant from has to be a Prefab root\");\n\n            if (path == null)\n                throw new ArgumentNullException(\"The path is null\");\n\n            var assetRootObjectPath = AssetDatabase.GetAssetPath(assetRoot);\n            if (Paths.AreEqual(path, assetRootObjectPath, true))\n                throw new ArgumentException(\"Creating a variant of an object into the source file of the input object is not allowed\");\n\n            if (!Paths.IsValidAssetPath(path, \".prefab\"))\n                throw new ArgumentException(\"Given path is not valid: '\" + path + \"'\");\n\n            return CreateVariant_Internal(assetRoot, path);\n        }\n\n        [NativeMethod(\"CreateVariant\", IsFreeFunction = true)]\n        extern private static GameObject CreateVariant_Internal([NotNull] GameObject original, string path);\n\n        [StaticAccessor(\"PrefabUtilityBindings\", StaticAccessorType.DoubleColon)]\n        [NativeMethod(ThrowsException = true)]\n        extern private static GameObject SavePrefab_Internal([NotNull] GameObject root, string path, bool connectToInstance, out bool success);\n\n        [StaticAccessor(\"PrefabUtilityBindings\", StaticAccessorType.DoubleColon)]\n        extern private static GameObject ApplyPrefabInstance_Internal([NotNull] GameObject root);\n\n        [StaticAccessor(\"PrefabUtilityBindings\", StaticAccessorType.DoubleColon)]\n        [NativeMethod(ThrowsException = true)]\n        extern private static GameObject SaveAsPrefabAsset_Internal([NotNull] GameObject root, string path, out bool success);\n","sourceCodeStart":226,"sourceCodeEnd":262,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/Prefabs/PrefabUtility.bindings.cs#L226-L262","documentation":"Thrown by CreateVariant when `Paths.IsValidAssetPath(path, \".prefab\")` returns false. This validates that the path lives under the project's Assets folder, is a valid asset path string, and ends with the required '.prefab' extension. It fires only after the null and source-collision checks pass.","triggerScenarios":"Passing an absolute filesystem path (e.g. \"C:/.../Foo.prefab\"), a path outside the Assets folder, a path with no '.prefab' extension, a path with a different extension, or a path containing illegal characters/empty segments.","commonSituations":"Using System.IO absolute paths instead of Unity-relative 'Assets/...' paths. Forgetting the '.prefab' extension. Typing a folder that does not exist under Assets. Copying a path from Explorer that includes a drive letter.","solutions":["Use a Unity-relative path rooted in Assets with a .prefab extension: \"Assets/Prefabs/Name.prefab\".","Ensure the parent directory exists under Assets (use AssetDatabase to create folders if needed).","Build the path with AssetDatabase.GenerateUniqueAssetPath to normalize it.","Strip drive letters and backslashes; convert to forward slashes and an Assets/ prefix."],"exampleFix":"// before\nvar v = PrefabUtility.CreateVariant(root, @\"C:\\Proj\\Variant.prefab\"); // invalid\n\n// after\nstring rel = \"Assets/Prefabs/\" + root.name + \"Variant.prefab\";\nrel = AssetDatabase.GenerateUniqueAssetPath(rel);\nvar v = PrefabUtility.CreateVariant(root, rel);","handlingStrategy":"validation","validationCode":"if (!path.StartsWith(\"Assets/\") || !path.EndsWith(\".prefab\", System.StringComparison.OrdinalIgnoreCase))\n    path = AssetDatabase.GenerateUniqueAssetPath(\"Assets/Prefabs/\" + assetRoot.name + \"Variant.prefab\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never pass absolute OS paths; always use Unity-relative 'Assets/...' paths.","Always include the '.prefab' extension explicitly.","Prefer AssetDatabase.GenerateUniqueAssetPath to normalize and validate in one step."],"tags":["prefab","create-variant","asset-path","invalid-extension"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}