我有一个用C#/.NET编写的控制台应用程序,我想从一个脚本(nant)中运行它。如果控制台应用程序发生异常,我希望nant可以继续运行,但在Windows Vista中会弹出一个搜索解决方案并要求调试等的窗口。
我想避免在控制台应用程序发生异常时出现“程序停止工作”的弹窗。如何从C#/.NET控制此问题?
(一个类似的问题涉及C语言的问题,但我需要一个适用于C#/.NET的解决方案。)
(澄清一下:我希望将异常传递给nant,但不要弹出弹窗。)
AppDomain.CurrentDomain.UnhandledException
事件,并调用Environment.Exit(1)
以优雅地退出。public static void Main
方法中应该就足够了。AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
Console.Error.WriteLine("Unhandled exception: " + args.ExceptionObject);
Environment.Exit(1);
};
在这种情况下,您可能应该使用NAnt记录器来写出错误(虽然我无法立即回忆起其API)。
您还可以在计算机上禁用JIT调试。 我只建议在某些情况下这样做,例如对于专用的构建服务器。
只需捕获异常并记录/忽略它即可。
弹出窗口是由于未处理的异常而出现的。为了避免这种情况,请确保您的主方法捕获所有异常并将它们转换为其他有用的信息,以便您可以获取它们。仅仅忽略异常是不推荐的。
顺便提一下,记住异常是针对每个线程的,因此如果您的应用程序生成线程或使用线程池线程,则还需要为这些线程设置处理程序。
args.ExceptionObject
不是Exception
类型?强制转换安全吗? - Winteras
强制转换并自己检查null
。 - Drew Noakes