{"record":{"id":"a4694859f378c361","repo":"Unity-Technologies/UnityCsReference","slug":"target-must-be-valid","errorCode":null,"errorMessage":"target must be valid","messagePattern":"target must be valid","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/Modules/ModuleManager.cs","lineNumber":576,"sourceCode":"            derivedBuildTargetProvider.RemoveDerivedBuildTargetExtension(platformGuid);\n            platformSupportModulesByGuid.Remove(platformGuid);\n        }\n\n        internal static string GetTargetStringFromBuildTarget(BuildTarget target)\n        {\n            return BuildTargetDiscovery.GetModuleNameForBuildTarget(target);\n        }\n\n        internal static string GetTargetStringFromBuildTargetGroup(BuildTargetGroup target)\n        {\n            return BuildTargetDiscovery.GetModuleNameForBuildTargetGroup(target);\n        }\n\n        // This function returns module name depending on the combination of targetGroup x target\n        internal static string GetTargetStringFrom(BuildTarget target)\n        {\n            if (target == BuildTarget.NoTarget)\n                throw new ArgumentException(\"target must be valid\");\n\n            return GetTargetStringFromBuildTarget(target);\n        }\n\n        [Obsolete(\"ModuleManager.GetTargetStringFrom(BuildTargetGroup targetGroup, BuildTarget target) is deprecated, please use ModuleManager.GetTargetStringFrom(BuildTarget target)\")]\n        internal static string GetTargetStringFrom(BuildTargetGroup targetGroup, BuildTarget target)\n        {\n            return GetTargetStringFrom(target);\n        }\n\n        internal static bool IsPlatformSupported(BuildTarget target)\n        {\n            return GetTargetStringFromBuildTarget(target) != null;\n        }\n\n        internal static string GetExtensionVersion(string target)\n        {\n            if (string.IsNullOrEmpty(target))","sourceCodeStart":558,"sourceCodeEnd":594,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/Modules/ModuleManager.cs#L558-L594","documentation":"Thrown by GetTargetStringFrom(BuildTarget) when the BuildTarget equals BuildTarget.NoTarget. NoTarget is the sentinel for an unset/invalid target and cannot be mapped to a module name.","triggerScenarios":"Passing BuildTarget.NoTarget (value 0) into ModuleManager.GetTargetStringFrom(BuildTarget). Often happens when a BuildTarget variable was never assigned or defaulted.","commonSituations":"Build pipeline invoked before a target was selected. BuildTarget parsed from an unset editor preference or a deserialized enum defaulting to 0 (NoTarget).","solutions":["Ensure the BuildTarget passed in is a concrete platform (e.g., StandaloneWindows64, Android).","Validate the target at the call site: reject NoTarget before invoking GetTargetStringFrom.","Initialize BuildTarget fields explicitly rather than relying on enum default."],"exampleFix":"// before\nstring t = ModuleManager.GetTargetStringFrom(activeTarget); // activeTarget may be NoTarget\n// after\nif (activeTarget == BuildTarget.NoTarget)\n    throw new InvalidOperationException(\"Select a build target first.\");\nstring t = ModuleManager.GetTargetStringFrom(activeTarget);","handlingStrategy":"validation","validationCode":"if (target != BuildTarget.NoTarget)\n    string s = ModuleManager.GetTargetStringFrom(target);","typeGuard":"static bool IsValidBuildTarget(BuildTarget t) => t != BuildTarget.NoTarget;","tryCatchPattern":null,"preventionTips":["Never pass uninitialized BuildTarget fields.","Default to an explicit platform in build scripts.","Validate target at the entry point of build helpers."],"tags":["unity","modules","build-target","validation"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}