.NET Core控制台应用程序中的全局异常处理程序

18

我正在将一个控制台应用程序移植到.NET Core,并且我正在尝试替换这行代码:

AppDomain.CurrentDomain.UnhandledException += UnhandledException;

阅读完this之后,似乎没有内置的方法可以做到这一点。

所以我的问题是:唯一的方法是用try/catch替换我整个代码周围的这行吗?

通过阅读this,似乎还有另一种方法,即继续使用System.AppDomain,但我似乎找不到这个类/方法。 我唯一的猜测是this library,但它明确表示尽可能不要使用,所以我不想使用它。


1
暂时没有帮助,但这个问题将在 .Net Core 1.2 中得到解决。 - stuartd
1.2被更名为2.0。原计划在VS2017中发布,但开发团队没能如期完成。目前“零缺陷”的目标是5月10日。 - Hans Passant
2个回答

18

0
这个现在可以工作了,所以对于任何想要在最新版本的.NET Core(例如.NET 6)中全局处理异常的人来说,使用的代码与旧的.NET Framework相同。
class Program {
    static void Main(string[] args) {
        System.AppDomain.CurrentDomain.UnhandledException += HandleGlobalException;
        throw new Exception("Fatal!");
    }

    static void HandleGlobalException(object sender, UnhandledExceptionEventArgs e) {
        Console.WriteLine(e.ExceptionObject.ToString());
        Console.WriteLine("Press Enter to continue...");
        Console.ReadLine();
        Environment.Exit(1);
    }
}

如果您的控制台应用程序使用顶级语句,也可以正常工作。
System.AppDomain.CurrentDomain.UnhandledException += HandleGlobalException;
throw new Exception("Fatal!");

static void HandleGlobalException(object sender, UnhandledExceptionEventArgs e) {
    Console.WriteLine(e.ExceptionObject.ToString());
    Console.WriteLine("Press Enter to continue...");
    Console.ReadLine();
    Environment.Exit(1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接