public virtual void HandleException(Exception ex, string stackTraceFile, string errorMessage) { ClassMappings.HandleException(ex, stackTraceFile, errorMessage); }
public static void Main(string[] args) { RetCode rc; try { rc = RetCode.Success; WorkDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); PushConstants(); PushClassMappings(); ClassMappings.LoadPortabilityClassMappings = LoadPortabilityClassMappings; ClassMappings.ResolvePortabilityClassMappings(); if (args == null || args.Length < 2 || !args[0].Equals("-pfn", StringComparison.OrdinalIgnoreCase)) { rc = RetCode.InvalidArg; ClassMappings.Error.WriteLine("{0}Usage: dotnet EamonPM.WindowsUnix.dll -pfn PluginFileName [PluginArgs]", Environment.NewLine); goto Cleanup; } try { while (true) { if (args == null || args.Length < 2 || !args[0].Equals("-pfn", StringComparison.OrdinalIgnoreCase)) { goto Cleanup; } var systemBinDir = string.Format("{0}System{0}Bin", Path.DirectorySeparatorChar); var currWorkDir = Directory.GetCurrentDirectory(); // if current working directory invalid, bail out if (!currWorkDir.EndsWith(systemBinDir) || currWorkDir.Length <= systemBinDir.Length || !Directory.Exists(Constants.AdventuresDir.Replace('\\', Path.DirectorySeparatorChar))) { rc = RetCode.Failure; ClassMappings.Error.WriteLine("{0}Usage: to run Eamon CS change your working directory to System{1}Bin", Environment.NewLine, Path.DirectorySeparatorChar); goto Cleanup; } ExecutePlugin(args); args = NextArgs; NextArgs = null; } } catch (Exception ex) { rc = RetCode.Failure; ClassMappings.HandleException ( ex, Constants.StackTraceFile, string.Format("{0}Error: Caught fatal exception; terminating program", Environment.NewLine) ); goto Cleanup; } Cleanup: if (rc != RetCode.Success) { ClassMappings.Error.WriteLine("{0}{1}", Environment.NewLine, new string('-', (int)Constants.RightMargin)); ClassMappings.Error.Write("{0}Press any key to continue: ", Environment.NewLine); ClassMappings.In.ReadKey(true); ClassMappings.Error.WriteLine(); ClassMappings.Thread.Sleep(150); } ClassMappings.Out.CursorVisible = true; } catch (Exception) { rc = RetCode.Failure; // do nothing } finally { PopClassMappings(); PopConstants(); } Environment.Exit(rc == RetCode.Success ? 0 : -1); }