public static CommandLineApplication Create(ref string[] args)
        {
            var app = new CommandLineApplication
            {
                Name     = "RESTier",
                FullName = "RESTier CLI Commands"
            };

            app.VersionOption("-v|--version", "1.0.0");
            app.HelpOption("-h|--help");

            app.Option("-c|--connectionstring",
                       "A connection string to a database. Used to reverse engineer a RESTier API.",
                       CommandOptionType.SingleValue);
            app.Option("-db|--database", "The database type for the new RESTier project, currently support SQLServer and MySQL",
                       CommandOptionType.SingleValue);
            app.Option("-a|--all", "Execute the new, build, run commands together", CommandOptionType.NoValue);

            app.Command("new", c => NewCommand.Configure(c));
            app.Command("build", c => BuildCommand.Configure(c));
            app.Command("run", c => RunCommand.Configure(c));

            app.OnExecute(
                () =>
            {
                var connectionString = app.GetOptionValue("connectionstring");
                var dbOption         = app.GetOptionValue("database");
                if (string.IsNullOrWhiteSpace(connectionString) || string.IsNullOrEmpty(dbOption))
                {
                    WriteLogo();
                    app.ShowHelp();
                    return(0);
                }

                var ret = app.Commands.First(c => c.Name == "new").Execute();

                // execute the build and run command for the -a option
                if (ret == 0 && app.Options.First(c => (c.LongName == "all" || c.ShortName == "a")).HasValue())
                {
                    string projectName    = app.Commands.First(c => c.Name == "new").GetOptionValue("name");
                    string[] argsForBuild = { "-p", projectName + "\\" + projectName + ".sln" };
                    app.Commands.First(c => c.Name == "build").Execute(argsForBuild);
                    app.Commands.First(c => c.Name == "run").Execute(argsForBuild);
                }
                return(0);
            });

            return(app);
        }