Exemplo n.º 1
0
        private string Execute(string[] providers, params string[] args)
        {
            var providersSet = (providers != null && providers.Any()) ? new HashSet <string>(providers) : null;

            var assemblyLoadPaths = PlatformAssemblyLoadPath
                                    .Where(x => providersSet?.Contains(x.Key) ?? true)
                                    .Select(x => x.Value)
                                    .ToArray();
            var environment = Environment
                              .Where(x => providersSet?.Contains(x.Key) ?? true)
                              .SelectMany(x => x.Value)
                              .ToDictionary(x => x.Key, x => x.Value);

            var pramExecutable          = Path.Combine(PlatformsPackagePath, "Editor/Unity.Build.Internals/pram~/pram.exe");
            var platformAssembliesPaths = string.Join(" ", assemblyLoadPaths.Select(x => $"--assembly-load-path \"{x}\""));

            // Override executable and assembly load paths if local repository is used
            if (LocalPramDevelopmentRepository != null)
            {
                pramExecutable          = $"\"{Path.Combine(LocalPramDevelopmentRepository, "artifacts/PramDistribution/pram.exe")}\"";
                platformAssembliesPaths = "";
            }

            var trace = Trace ? "--trace --very-verbose" : "";

#if UNITY_EDITOR_WIN
            var exe = ".exe";
#elif UNITY_EDITOR_OSX
            var exe = "";
#else
            var exe = "";
#endif
            var monoExe   = $"{EditorApplication.applicationContentsPath}/MonoBleedingEdge/bin/mono{exe}";
            var arguments = new List <string> {
                $"\"{pramExecutable}\"", trace, platformAssembliesPaths
            };
            arguments.AddRange(args.Select(arg => $"\"{arg}\""));
            var result = ShellProcess.Run(new ShellProcessArguments()
            {
                ThrowOnError = false,
                AnyOutputToErrorIsAnError = false,
                Executable           = monoExe,
                Arguments            = arguments.ToArray(),
                EnvironmentVariables = environment
            });

            if (Trace)
            {
                Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "{0}", result.ErrorOutput);
            }

            if (!result.Succeeded)
            {
                throw new Exception($"Failed {result.Command}\n{result.ErrorOutput}");
            }
            return(result.FullOutput);
        }