Как указать код выхода консольного приложения в .NET?

У меня тривиальное консольное приложение в .NET. Это просто тестовая часть большего приложения. Я хотел бы указать "код выхода" моего консольного приложения. Как это сделать?

Ответ 1

Вы можете вернуть его из Main, если вы объявите метод Main для возврата int или вызовите Environment.Exit(code).

Ответ 2

В дополнение к ответам, охватывающим возвращение int... просьба о здравомыслии. Пожалуйста, определите коды выхода в перечислении, с флагами, если это необходимо. Это облегчает отладку и обслуживание (и в качестве бонуса вы можете легко распечатать коды выхода на экране справки - у вас есть один из них, верно?).

enum ExitCode : int {
  Success = 0,
  InvalidLogin = 1,
  InvalidFilename = 2,
  UnknownError = 10
}

int Main(string[] args) {
   return (int)ExitCode.Success;
}

Ответ 3

Если вы собираетесь использовать метод, предложенный Дэвидом, вы также должны взглянуть на атрибут [Флаги].

Это позволяет выполнять бит мудрые операции с перечислениями.

[Flags]
enum ExitCodes : int
{
  Success = 0,
  SignToolNotInPath = 1,
  AssemblyDirectoryBad = 2,
  PFXFilePathBad = 4,
  PasswordMissing = 8,
  SignFailed = 16,
  UnknownError = 32
}

Тогда

(ExitCodes.SignFailed | ExitCodes.UnknownError)

будет 16 + 32.:)

Ответ 4

Существует три метода, которые можно использовать для возврата кода выхода из консольного приложения.

  • Измените метод Main в своем приложении, чтобы он возвращал int вместо void (функция, которая возвращает Integer вместо Sub в VB.Net), а затем возвращает код выхода из этого метода.
  • Установите для свойства Environment.ExitCode код выхода. Обратите внимание, что метод 1. имеет приоритет - если метод Main возвращает ничего, кроме void (это Sub в VB.Net), то значение этого свойства будет проигнорировано.
  • Передайте код выхода методу Environment.Exit. Это немедленно прекратит процесс, а не два других метода.

Важным стандартом, который следует соблюдать, является то, что 0 представляет "Успех".

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

Кроме того, убедитесь, что ваше приложение скомпилировано как "консольное приложение".

Ответ 6

int code = 2;
Environment.Exit( code );

Ответ 7

Используйте ExitCode, если у вашей главной есть обратная подпись void, иначе вам нужно "установить" ее по возвращаемому вами значению.

Свойство Environment.ExitCode

Если метод Main возвращает void, вы можете использовать это свойство, чтобы установить код выхода, который будет возвращен вызывающей среде. Если Main не возвращает void, это свойство игнорируется. Начальное значение этого свойства равно нулю.

Ответ 8

Просто верните соответствующий код из основного.

int main(string[] args)
{
      return 0; //or exit code of your choice
}

Ответ 9

Опция перечисления превосходна, однако ее можно улучшить, умножив числа, как в:

enum ExitCodes : int
{
  Success = 0,
  SignToolNotInPath = 1,
  AssemblyDirectoryBad = 2,
  PFXFilePathBad = 4,
  PasswordMissing = 8,
  SignFailed = 16,
  UnknownError = 32
}

В случае нескольких ошибок добавление конкретных номеров ошибок вместе даст вам уникальный номер, который будет представлять собой комбинацию обнаруженных ошибок.

Например, уровень ошибок 6 может состоять только из ошибок 4 и 2, 12 может состоять только из ошибок 4 и 8, 14 может состоять только из 2, 4 и 8 и т.д.

Ответ 10

Как обновление для Scott Munro answer:

  • В С# 6.0 и VB.NET 14.0 (VS 2015), Environment.ExitCode или Environment.Exit(exitCode) требуется для возврата ненулевого кода из консольного приложения. Изменение типа возврата Main не влияет.
  • В F # 4.0 (VS 2015) учитывается возвращаемое значение точки входа Main.

Ответ 11

Мои 2 цента:

Здесь вы можете найти коды системных ошибок: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Вы найдете типичные коды, например, 2 для "файл не найден" или 5 для "отказа в доступе".

И когда вы натыкаетесь на неизвестный код, вы можете использовать эту команду, чтобы узнать, что это значит:

net helpmsg decimal_code

например.

net helpmsg 1

возвращает

Неверная функция