/// <summary> /// CLI program entry point which defines command verbs and options to running /// </summary> /// <param name="args"></param> public static int Main(string[] args) { int finalResult = (int)Utils.ExitCode.CriticalError; Utils.CLIExecutionContext = true;//set manually at start from CLI WriteOnce.Verbosity = WriteOnce.ConsoleVerbosity.Medium; try { var argsResult = Parser.Default.ParseArguments <CLIAnalyzeCmdOptions, CLITagDiffCmdOptions, CLITagTestCmdOptions, CLIExportTagsCmdOptions, CLIVerifyRulesCmdOptions, CLIPackRulesCmdOptions>(args) .MapResult( (CLIAnalyzeCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLITagDiffCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLITagTestCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLIExportTagsCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLIVerifyRulesCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLIPackRulesCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), errs => 1 ); finalResult = argsResult; } catch (OpException) { //log, output file and console have already been written to ensure all are updated for NuGet and CLI callers //that may exit at different call points } catch (Exception e) { //unlogged exception so report out for CLI callers WriteOnce.SafeLog(e.Message + "\n" + e.StackTrace, NLog.LogLevel.Error); } //final exit msg to review log if (finalResult == (int)Utils.ExitCode.CriticalError) { if (!string.IsNullOrEmpty(Utils.LogFilePath)) { WriteOnce.Info(MsgHelp.FormatString(MsgHelp.ID.RUNTIME_ERROR_UNNAMED, Utils.LogFilePath), true, WriteOnce.ConsoleVerbosity.Low, false); } else { WriteOnce.Info(MsgHelp.GetString(MsgHelp.ID.RUNTIME_ERROR_PRELOG), true, WriteOnce.ConsoleVerbosity.Medium, false); } } else { if (Utils.LogFilePath is not null && File.Exists(Utils.LogFilePath)) { var fileInfo = new FileInfo(Utils.LogFilePath); if (fileInfo.Length > 0) { WriteOnce.Info(MsgHelp.FormatString(MsgHelp.ID.CMD_REMINDER_CHECK_LOG, Utils.LogFilePath ?? Utils.GetPath(Utils.AppPath.defaultLog)), true, WriteOnce.ConsoleVerbosity.Low, false); } } } return(finalResult); }