避免在C#/ .NET中"程序停止工作"

Ole*_*nge 30 .net c# exception popup windows-vista

我有一个用C#/ .NET编写的控制台应用程序,我想从脚本(nant)运行.如果控制台应用程序中发生异常,我不想继续,但在Windows Vista中有一个弹出窗口,它会搜索解决方案并要求调试等.

当控制台应用程序中发生异常时,我想避免弹出"程序停止工作".如何从C#/ .NET控制它?

(类似的问题解决了C语言的问题,但我想要一个C#/ .NET的解决方案.)

(澄清一下:我希望将异常传递给nant,但没有弹出窗口.)

Dre*_*kes 43

当存在未处理的异常时,会发生JIT调试器弹出窗口.也就是说,异常隧道一直向上隧道到运行时中任何线程的根.

为避免这种情况,您可以处理该AppDomain.CurrentDomain.UnhandledException事件,只需调用Environment.Exit(1)即可正常退出.

这将处理AppDomain中所有线程的所有异常.除非你做任何特别的事情,否则你的app可能只有一个AppDomain,所以把它放在你的public static void Main方法中就足够了:

AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
    Console.Error.WriteLine("Unhandled exception: " + args.ExceptionObject);
    Environment.Exit(1);
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您应该使用NAnt记录器来写出错误(虽然不能回想起这个问题的API.)

您还可以在计算机上禁用JIT调试.我只会在某些情况下推荐这种方法,例如专用的构建服务器.