static void Main(string[] args) { // PARSE ARGS var argsParser = new CommandLineParser.CommandLineParser(); var parsedArgs = new ConsoleArgs(); argsParser.ExtractArgumentAttributes(parsedArgs); argsParser.ParseCommandLine(args); if (parsedArgs.Rainbow) { LegacyProgram.Run(args); } else { Run(parsedArgs, argsParser); } }
private static void Run(ConsoleArgs parsedArgs, CommandLineParser.CommandLineParser argsParser) { if (parsedArgs.Help) { argsParser.ShowUsage(); Environment.Exit(-1); } AssemblyLoadContext.Default.Resolving += (context, name) => { var pluginDir = ResolvePluginPath(parsedArgs.PluginPath); // Try to load from the plugins directory. Else, fall back to the app directory if (File.Exists(Path.Combine(pluginDir, $"{name.Name}.dll"))) { return(context.LoadFromAssemblyPath(Path.Combine(pluginDir, $"{name.Name}.dll"))); } return(context.LoadFromAssemblyPath(Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{name.Name}.dll")))); }; var appRunTimer = new Stopwatch(); appRunTimer.Start(); var runner = new Runner(); try { runner.Run(parsedArgs); } catch (FileNotFoundException ex) { new ConsoleLogger().Error(ex); Environment.Exit(1); } appRunTimer.Stop(); if (parsedArgs.NoExit) { Console.ReadKey(); } }