private static void MainInternal(string[] args) { var options = new HortonOptions(); bool showHelp = false; bool printVersion = false; var p = new OptionSet() { { "m|migrations=", "path to migration scripts.\n(leave blank for current directory)", v => options.MigrationsDirectoryPath = v }, { "s|server=", "server hostname.\n(leave blank for \"localhost\")", v => options.ServerHostname = v }, { "d|database=", "database name.\n(leave blank to look for \"database.name\")", v => options.DatabaseName = v }, { "u|username="******"username of the database connection.\n(leave blank for integrated security)", v => options.Username = v }, { "p|password="******"password of the database connection.\n(required if username is provided)", v => options.Password = v }, { "c|connectionString=", "ADO.NET connection string.\n(optional, overrides other parameters)", v => options.ConnectionString = v }, { "U|UNATTEND", "Surpress user acknowledgement during\nexecution.", v => options.Unattend = v != null }, { "v|version", "Print version number and exit.", v => printVersion = v != null }, { "h|help|?", "show help message and exit.", v => showHelp = v != null }, }; if (args.Length == 0) { showHelp = true; } List<string> extra; try { extra = p.Parse(args); } catch (OptionException e) { Console.WriteLine(e.Message); Console.WriteLine("Try `horton.exe --help' for more information."); return; } if (!options.Unattend) { Console.WriteLine("Horton. The simple database migration utility."); } if (showHelp) { ShowHelp(p); return; } if (printVersion) { Console.WriteLine("Version: " + typeof(Program).Assembly.GetName().Version.ToString()); return; } options.Command = HortonCommands.TryParseCommand(extra.FirstOrDefault() ?? ""); options.ExtraArguments = extra.Skip(1).ToArray(); string firstValidationMessage = ""; if (!options.AssertValid(out firstValidationMessage)) { Console.WriteLine(firstValidationMessage); Console.WriteLine("Try `horton.exe --help' for more information."); Environment.Exit(1); } options.Command.Execute(options); }