我有一个用 C#/.NET 编写的控制台应用程序,我想从脚本 (nant) 运行它。如果控制台应用程序发生异常,我想继续,但在 Windows Vista 中有一个弹出窗口,用于搜索解决方案并要求调试等。
当控制台应用程序发生异常时,我想避免弹出“程序停止工作”。我如何从 C#/.NET 控制它?
(一个类似的问题地址 the issue for the C language,但我想要 C#/.NET 的解决方案。)
(澄清一下:我希望将异常传递给 nant,但没有弹出窗口。)
最佳答案
当出现未处理的异常时,会出现 JIT 调试器弹出窗口。也就是说,异常会一直沿着堆栈向上延伸到运行时中任何线程的根。
为避免这种情况,您可以处理 AppDomain.CurrentDomain.UnhandledException
事件,只需调用 Environment.Exit(1)
优雅地退出。
这将处理 AppDomain 中所有线程上的所有异常。除非您正在做任何特别的事情,否则您的应用可能只有一个 AppDomain,因此将其放入您的 public static void Main
方法中就足够了:
AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
Console.Error.WriteLine("Unhandled exception: " + args.ExceptionObject);
Environment.Exit(1);
};
在这种情况下,您可能也应该使用 NAnt 记录器来写出错误(虽然不记得这个副手的 API。)
您也可以disable JIT debugging在机器上。我只会在某些情况下推荐这样做,例如专用构建服务器。
关于c# - 在 C#/.NET 中避免 "program stopped working",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421597/