public static void PreAppStart()
        {
            var configurationProcessor = new ConfigurationProcessor(
                new SecretReaderFactory(ConfigurationManager.AppSettings));

            configurationProcessor.InjectSecretsInto(ConfigurationManager.AppSettings);
        }
        public int Invoke(string[] args)
        {
            try
            {
                HelpCommand = new HelpCommand(Manager, "galops", "NuGet Gallery Operations", "https://github.com/NuGet/NuGetOperations/wiki/GalOps---Gallery-Operations-Commands");

                // Add commands
                foreach (ICommand cmd in Commands)
                {
                    Manager.RegisterCommand(cmd);
                }

                var secretReaderFactory = new SecretReaderFactory(ConfigurationManager.AppSettings);

                var configurationProcessor = new ConfigurationProcessor(secretReaderFactory);
                configurationProcessor.InjectSecretsInto(ConfigurationManager.AppSettings);

                // Parse the command
                var parser = new CommandLineParser(Manager, secretReaderFactory);
                ICommand command = parser.ParseCommandLine(args) ?? HelpCommand;

                // Fall back on help command if we failed to parse a valid command
                if (!ArgumentCountValid(command))
                {
                    string commandName = command.CommandAttribute.CommandName;
                    Console.WriteLine("{0}: invalid arguments..", commandName);
                    HelpCommand.ViewHelpForCommand(commandName);
                }
                else
                {
                    command.Execute();
                }
            }
            catch (AggregateException exception)
            {
                string message;
                Exception unwrappedEx = ExceptionUtility.Unwrap(exception);
                if (unwrappedEx == exception)
                {
                    // If the AggregateException contains more than one InnerException, it cannot be unwrapped. In which case, simply print out individual error messages
                    message = String.Join(Environment.NewLine, exception.InnerExceptions.Select(ex => ex.Message).Distinct(StringComparer.CurrentCulture));
                }
                else
                {
                    message = ExceptionUtility.Unwrap(exception).Message;
                }
                _logger.Error("{0}: {1}", unwrappedEx.GetType().Name, message);
                _logger.Error(" Stack Trace: " + unwrappedEx.StackTrace);
                return 1;
            }
            catch (Exception e)
            {
                var ex = ExceptionUtility.Unwrap(e);
                _logger.Error("{0}: {1}", ex.GetType().Name, ex.Message);
                _logger.Error(" Stack Trace: " + ex.StackTrace);
                return 1;
            }
            return 0;
        }