static void Main(string[] args)
        {
            bool   hubUpload          = false;
            string username           = null;
            string password           = null;
            bool   ignoreSsl          = false;
            string targetAssemblyPath = null;
            string outputFile         = null;


            ParserResult <Options> parseResult = CommandLine.Parser.Default.ParseArguments <Options>(args).WithNotParsed(result =>
            {
                Console.Error.WriteLine("Invalid usage");
                Environment.Exit(1);
            }).WithParsed(options =>
            {
                ignoreSsl          = options.IgnoreSslErrors;
                outputFile         = options.OutputFile.FirstOrDefault();
                targetAssemblyPath = Path.GetFullPath(options.AssemblyToScan);
            });

            if (string.IsNullOrWhiteSpace(outputFile))
            {
                //No output argument. Do we have a preconfigured hub instance?
                if (Settings.Instance.Url != null)
                {
                    username = Settings.Instance.Username;
                    while (string.IsNullOrEmpty(username))
                    {
                        username = Prompt.Read($"Please enter a username for the hub instance at {Settings.Instance.Url}");
                    }
                    password = Settings.Instance.Password;
                    while (string.IsNullOrEmpty(password))
                    {
                        password = Prompt.ReadPassword($"Please enter the password for user {Settings.Instance.Username} at the Hub instance at {Settings.Instance.Url}");
                    }
                    hubUpload = true;
                }
                else
                {
                    Console.Error.WriteLine("No URL specified in configuration file and no output file specified. Exiting.");
                    Environment.Exit(1);
                }
            }

            if (ignoreSsl)
            {
                Console.WriteLine("SSL errors will be ignored.");
                ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
            }

            Console.WriteLine("Scanning " + targetAssemblyPath + "...");


            ScannerJsonBuilder builder = scanAssembly(targetAssemblyPath);

            if (hubUpload)
            {
                HubUpload.UploadScan(Settings.Instance.Url, username, password, builder);
            }
            else
            {
                using (var fileWriter = new StreamWriter(outputFile, false))
                {
                    builder.Write(fileWriter);
                }
            }
        }