public BuildEnvsOptions(BuildEnvsOptions buildOptions)
 {
     this.assetBundleManifestPath = buildOptions.assetBundleManifestPath;
     this.locationPathName        = buildOptions.locationPathName;
     this.options     = buildOptions.options;
     this.scenes      = buildOptions.scenes;
     this.target      = buildOptions.target;
     this.targetGroup = buildOptions.targetGroup;
 }
        private static int BuildPlayer(BuildEnvsOptions buildOptions, bool revealInFinder = false)
        {
            BuildPipelineCommonTools.FileUtils.CheckDir(Path.GetDirectoryName(buildOptions.locationPathName));
#if UNITY_2018_1_OR_NEWER
            UnityEditor.Build.Reporting.BuildReport  report  = BuildPipeline.BuildPlayer(buildOptions.GetBuildPlayerOptions());
            UnityEditor.Build.Reporting.BuildSummary summary = report.summary;
            string errorMessage   = string.Join("\n", report.steps.SelectMany(s => s.messages).Where(m => m.type == LogType.Error).Select(m => m.content).ToArray());
            bool   buildSucceeded = (summary.result == UnityEditor.Build.Reporting.BuildResult.Succeeded);
#else
            string errorMessage   = BuildPipeline.BuildPlayer(buildOptions.scenes, buildOptions.locationPathName, buildOptions.target, buildOptions.options);
            bool   buildSucceeded = !string.IsNullOrEmpty(errorMessage);
#endif

            UnityEngine.Debug.ClearDeveloperConsole();
            BuildPipelineExecutor.DefaultBuildEnvsOptions.DeletePackagingCacheFolders();
            if (buildSucceeded)
            {
                if (revealInFinder)
                {
                    EditorUtility.RevealInFinder(buildOptions.locationPathName);
                }
#if UNITY_2018_1_OR_NEWER
                Debug.Log("Build completed successfully for {0}: {1} mb and took {2} seconds with {3} error(s). Location: {4}",
                          summary.platform.ToString(),
                          (summary.totalSize / 1024 / 1024).ToString("N2"),
                          summary.totalTime.Seconds,
                          summary.totalErrors,
                          summary.outputPath
                          );
#else
                Debug.Log(string.Format("Build completed successfully for {0} to {1}", buildPlayerOptions.target, buildPlayerOptions.locationPathName));
#endif
                return(0);
            }
            else
            {
                Debug.LogError("Build failed with errors \n" + errorMessage);
                //throw new BuildFailedException("Build failed with errors \n" + errorMessage);
                return(1);
            }
        }
 private static void PreBuild(BuildEnvsOptions buildOptions)
 {
     if (UnityEditor.BuildPipeline.isBuildingPlayer)
     {
         return;
     }
     PlayerSettingsSnapshot.ApplySnapshotIfFailed(() =>
     {
         PlayerSettingsSnapshot.TakeSnapshot();
         BuildPipelineExecutor.DefaultBuildEnvsOptions.ApplySettings();
         bool valid = BuildPipelineValidator.IsValid(buildOptions.targetGroup);
         if (!valid)
         {
             //Debug.LogError("Build failure with errors");
             throw new BuildFailedException("Build failure with errors");
         }
         int code = BuildPlayer(buildOptions, false);
         if (CommandLineArgs.InBatchMode())
         {
             EditorApplication.Exit(code);
         }
     });
 }