public static void Main(string[] args) { var config = new NLog.Config.LoggingConfiguration(); var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "Server.log", DeleteOldFileOnStartup = true }; var logconsole = new NLog.Targets.ConsoleTarget("logconsole"); config.AddRule(LogLevel.Debug, LogLevel.Fatal, logconsole); config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile); NLog.LogManager.Configuration = config; Logger.Info("Server"); try { if (!readArgs(args)) { throw new Exception("Error in args!"); } var clientCommunication = WaitForClients(); var taskRunner = new TaskRunner(clientCommunication, _args); var type = _args.LoadedAssembly.GetType($"{_args.LoadedAssembly.GetName().Name}.Algorithm"); var obj = Activator.CreateInstance(type); var algorithm = (IStartAlgorithm)obj; taskRunner.LoadAssembly($"{_args.LoadedAssembly.GetName().Name}.dll"); algorithm.Run(taskRunner); taskRunner.Finish(); clientCommunication.Quit(); } catch (Exception e) { Logger.Error(e); } Logger.Info("Exitting..."); Console.ReadLine(); }