{"record":{"id":"8c32ee90b6f7bcb1","repo":"Unity-Technologies/UnityCsReference","slug":"build-profile-is-invalid","errorCode":null,"errorMessage":"Build profile is invalid.","messagePattern":"Build profile is invalid\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/BuildPipeline/BuildPipeline.bindings.cs","lineNumber":136,"sourceCode":"        internal static string[] RetrieveAdditionalBuildReportDirectoriesFromPlayerContext()\n        {\n            if (BuildPlayerContext.ActiveInstance == null)\n                return Array.Empty<string>();\n            return BuildPlayerContext.ActiveInstance.RetrieveAdditionalBuildReportDirectories();\n        }\n\n        ///<summary>Builds a player from a specific build profile.</summary>\n        ///<param name=\"buildPlayerWithProfileOptions\">Provide various options to control the behavior of <see cref=\"BuildPipeline.BuildPlayer\" /> when using a <see cref=\"BuildProfile\">build profile</see>.</param>\n        ///<returns>A <see cref=\"BuildReport\" /> object containing build process information.</returns>\n        /// <exception cref=\"ArgumentException\">Throws if build profile is null.</exception>\n        ///<example>\n        ///  <code source=\"../../../Modules/ContentBuild/Tests/local.test.build-examples/Editor/BuildPipeline/BuildPipeline_BuildPlayerWithBuildProfile.cs\"/>\n        ///</example>\n        public static BuildReport BuildPlayer(BuildPlayerWithProfileOptions buildPlayerWithProfileOptions)\n        {\n            var buildProfile = buildPlayerWithProfileOptions.buildProfile;\n            if (buildProfile == null)\n                throw new ArgumentException(\"Build profile is invalid.\");\n\n            BuildProfileContext.activeProfile = buildProfile;\n            var buildPlayerOptions = BuildProfileModuleUtil.GetBuildPlayerOptionsFromActiveProfile(\n                buildPlayerWithProfileOptions.locationPathName, buildPlayerWithProfileOptions.assetBundleManifestPath, buildPlayerWithProfileOptions.options, buildPlayerWithProfileOptions.extraScriptingDefines);\n            return BuildPlayer(buildPlayerOptions);\n        }\n\n        // Legacy signature for calling BuildPlayer()\n        // Do not add any more overloads of BuildPlayer, or arguments to this method.  Functionality should be added by extending BuildPlayerOptions\n        ///<summary>Builds a Player. These overloads are still supported, but will be replaced. Please use BuildPlayer(<see cref=\"BuildPlayerOptions\" /> buildPlayerOptions) and BuildPlayer(<see cref=\"BuildPlayerWithProfileOptions\" /> buildPlayerWithProfileOptions) instead.</summary>\n        ///<param name=\"levels\">The scenes to include in the build. If empty, the build includes only the current open scene. Paths are relative to the project folder, for example <c>Assets/MyLevels/MyScene.unity</c>.</param>\n        ///<param name=\"locationPathName\">The path where the application will be built. For information on the platform extensions to include in the path, refer to [Build path requirements for target platforms](xref:um-build-path-requirements).</param>\n        ///<param name=\"target\">The <see cref=\"BuildTarget\" /> to build.</param>\n        ///<param name=\"options\">Additional <see cref=\"BuildOptions\" />, like whether to run the built player.</param>\n        ///<returns>A <see cref=\"BuildReport\" /> object containing build process information.</returns>\n        public static BuildReport BuildPlayer(EditorBuildSettingsScene[] levels, string locationPathName, BuildTarget target, BuildOptions options)\n        {\n            BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();","sourceCodeStart":118,"sourceCodeEnd":154,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/BuildPipeline/BuildPipeline.bindings.cs#L118-L154","documentation":"ArgumentException thrown by BuildPipeline.BuildPlayer(BuildPlayerWithProfileOptions) when buildPlayerWithProfileOptions.buildProfile is null. The build profile carries platform target, scenes, scripting backend, and other build configuration; a null profile means no valid build configuration was supplied.","triggerScenarios":"Calling BuildPipeline.BuildPlayer with a BuildPlayerWithProfileOptions object whose buildProfile field is null. Occurs when the profile is not assigned programmatically, when deserialization of build options leaves the profile unset, or when a script constructs options without populating the profile.","commonSituations":"Scripts that create BuildPlayerWithProfileOptions via new but forget to set buildProfile, build automation that loads profiles from assets where the asset reference is missing, conditional code paths that skip profile assignment, editor scripts referencing a deleted or moved BuildProfile asset.","solutions":["Ensure buildProfile is assigned before calling BuildPipeline.BuildPlayer.","If loading a profile from an asset, verify AssetDatabase.LoadAssetAtPath returns a non-null BuildProfile.","Add a null check: if (options.buildProfile == null) { /* handle */ return; }","Validate the BuildProfile asset exists at the expected path and is of the correct type."],"exampleFix":"// before\nvar options = new BuildPlayerWithProfileOptions\n{\n    locationPathName = \"Build/app.exe\",\n    // buildProfile missing!\n};\nBuildPipeline.BuildPlayer(options);\n// after\nvar profile = AssetDatabase.LoadAssetAtPath<BuildProfile>(\"Assets/Profiles/default.asset\");\nif (profile == null) throw new InvalidOperationException(\"BuildProfile asset not found.\");\nvar options = new BuildPlayerWithProfileOptions\n{\n    buildProfile = profile,\n    locationPathName = \"Build/app.exe\",\n};\nBuildPipeline.BuildPlayer(options);","handlingStrategy":"validation","validationCode":"// Validate build profile before calling BuildPlayer\nif (buildPlayerWithProfileOptions.buildProfile == null)\n{\n    Debug.LogError(\"Build profile is not assigned.\");\n    return;\n}\nBuildPipeline.BuildPlayer(buildPlayerWithProfileOptions);","typeGuard":"static bool HasValidProfile(BuildPlayerWithProfileOptions options)\n    => options != null && options.buildProfile != null;","tryCatchPattern":null,"preventionTips":["Always assign buildProfile before calling BuildPipeline.BuildPlayer.","Verify AssetDatabase.LoadAssetAtPath<BuildProfile> returns non-null.","Use [SerializeField] references to BuildProfile assets to avoid missing references.","Log the profile reference state in build scripts to catch unassigned profiles early."],"tags":["build-pipeline","build","validation","argument-validation","build-profile"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}