// Net core 3.1 Console application
class Program
{
public static void Main()
{
Environment.ExitCode = 1;
throw new Exception("boom");
}
}
上述代码的结果是退出代码 0
!
我以为会是 1
.
https:/docs.microsoft.comen-usdotnetapisystem.environment.exitcode?view=netcore-3.1。 说 "获取或设置进程的退出代码。"。此外,"如果Main方法返回void,你可以使用这个属性设置将返回给调用环境的退出代码"。
如果我去掉异常抛出,退出代码是 1
正如我所料。
我想,这个问题的关键是 Environment.ExitCode
是为了指定一个退出代码,除非程序到了一个点,否则将使用这个退出代码来设置。
我如何确保退出代码是非零.同时又不需要捕获所有的异常?我希望异常实际上与非零的退出代码一起被抛出,因为环境可以使用它来显示相关的错误信息。
我真的需要在捕获任何异常和所有异常之间做出选择吗(甚至为所有异常添加一个处理程序 AppDomain.CurrentDomain.UnhandledException
),还是能够返回一个我选择的退出代码?
我在这里也做了一个问题 https:/github.comdotnetruntimeissues35599。. 有人指出,退出代码 0
好像是visual studio特有的东西。在正常环境下,它的输出是非零。然而,自定义的 Environment.ExitCode
在发生异常时仍然没有使用。异常处理是操作系统特有的--重要的是,在prod中,异常时确实应该返回一个非零的代码。异常处理中的 Environment.ExitCode
是故意不在异常情况下使用的。