当Main抛出异常时,不尊重环境.ExitCode。如何在抛出异常的同时返回非零的exitcode?

问题描述 投票:0回答:1
// 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),还是能够返回一个我选择的退出代码?

c# console-application exit-code .net-core-3.1
1个回答
0
投票

我在这里也做了一个问题 https:/github.comdotnetruntimeissues35599。. 有人指出,退出代码 0 好像是visual studio特有的东西。在正常环境下,它的输出是非零。然而,自定义的 Environment.ExitCode 在发生异常时仍然没有使用。异常处理是操作系统特有的--重要的是,在prod中,异常时确实应该返回一个非零的代码。异常处理中的 Environment.ExitCode 是故意不在异常情况下使用的。

© www.soinside.com 2019 - 2024. All rights reserved.