Environment.ExitCode не соблюдается, когда Main генерирует исключение. Как вернуть ненулевой код выхода, а также выдать исключение? - PullRequest
0 голосов
/ 28 апреля 2020
// Net core 3.1 Console application
class Program
{
   public static void Main()
   {
      Environment.ExitCode = 1;
      throw new Exception("boom");
   }
}

Приведенный выше код приводит к коду выхода 0!

Я ожидал, что это будет 1.

https://docs.microsoft.com/en-us/dotnet/api/system.environment.exitcode?view=netcore-3.1 говорит "Получает или устанавливает код завершения процесса. " Кроме того, «Если метод Main возвращает void, вы можете использовать это свойство для установки кода выхода, который будет возвращен вызывающей среде».

Если я удаляю исключение, код выхода будет 1 как и ожидалось.

Я думал, что самой целью Environment.ExitCode было указать код выхода, который будет использоваться, если программа не достигнет точки, в которой он установлен иначе.

Как мне сделать уверен, что код выхода не равен нулю. в то время как все еще не нужно ловить все исключения? Я хочу, чтобы исключение на самом деле генерировалось вместе с ненулевым кодом выхода, потому что среда могла бы использовать его для отображения соответствующего сообщения об ошибке.

Действительно ли мне нужно выбирать между перехватом любого и всех исключений (вплоть до добавление обработчика для AppDomain.CurrentDomain.UnhandledException) или возможность возврата кода выхода по моему выбору?

1 Ответ

0 голосов
/ 05 мая 2020

Я также сделал проблему здесь https://github.com/dotnet/runtime/issues/35599. Было отмечено, что код выхода 0 выглядит как визуальная студия, определяющая c вещь. Он выводит ненулевое значение в обычной среде. Тем не менее, пользовательский Environment.ExitCode по-прежнему не используется в случае исключения. Обработка исключений определяется ОС c - важно то, что ненулевой код действительно должен возвращаться при исключении в prod. Поведение Environment.ExitCode намеренно не должно использоваться при исключении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...