public static int Main(string[] args)
        {
            var t0 = DateTime.Now;
            var output = new PlainTextOutput(System.Console.Out);
            var options = CommandLineParser<ConsoleOptions>.Parse(args);

            if (!options.Nologo)
                WriteHeader(output);

            if (options.Help)
            {
                options.ShowHelp();
                return 0;
            }

            if (!options.IsValid())
            {
                WriteInvalidArguments(options);
                return ReturnCode.InvalidArguments;
            }

            if (options.WaitForDebugger)
            {
                WaitForDebuggerToAttach();
                if (!Debugger.IsAttached)
                {
                    output.WriteLine("fatal error: timeout while waiting for debugger to attach");
                    return ReturnCode.AttachDebuggerTimeout;
                }
            }

            var assemblies = options.Parameters.ToArray().Select(assembly => assembly).Cast<string>().ToList();
            var config = NBehaveConfiguration.New
                .SetScenarioFiles((options.ScenarioFiles).Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                .SetDryRun(options.DryRun)
                .SetAssemblies(assemblies)
                .UseTagsFilter(options.Tags.Select(_=>_.Split(',')))
                .SetEventListener(CreateEventListener(options));

            FeatureResults featureResults = null;

            try
            {
                featureResults = Run(config);
            }
            catch (FileNotFoundException fileNotFoundException)
            {
                System.Console.WriteLine(string.Format("File not found: {0}", fileNotFoundException.FileName));
                return ReturnCode.FileNotFound;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.ToString());
            }

            PrintTimeTaken(t0);

            if (options.DryRun)
            {
                return 0;
            }

            if (options.Pause)
            {
                System.Console.WriteLine("Press any key to exit");
                System.Console.ReadKey();
            }
            return (featureResults == null) ? -1 : featureResults.NumberOfFailingScenarios;
        }