Как мне указать код выхода консольного приложения в .NET?
Вопрос
У меня есть тривиальное консольное приложение в .NET.Это всего лишь тестовая часть более крупного приложения.Я хотел бы указать "код выхода" моего консольного приложения.Как мне это сделать?
Решение
3 варианта:
- Вы можете вернуть его из
Main
если вы заявите о своемMain
способ возвратаint
. - Ты можешь позвонить
Environment.Exit(code)
. - Вы можете задать код выхода, используя свойства:
Environment.ExitCode = -1;
.Это будет использовано, если ничто другое не задает код возврата или используется один из других вариантов, приведенных выше).
В зависимости от вашего приложения (консоль, сервис, веб-приложение и т.д.) Могут использоваться различные методы.
Другие советы
В дополнение к ответам, охватывающим возвращаемые значения int...мольба о здравомыслии.Пожалуйста, укажите ваши коды выхода в перечислении, с флагами, если это необходимо.Это значительно упрощает отладку и обслуживание (и, в качестве бонуса, вы можете легко распечатать коды выхода на экране справки - у вас ведь есть один из них, верно?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
Существует три метода, которые вы можете использовать для возврата кода выхода из консольного приложения.
- Изменить
Main
метод в вашем приложении, чтобы он возвращалint
вместо того, чтобыvoid
(функция, которая возвращаетInteger
вместо того, чтобыSub
в VB.Net), а затем верните код выхода из этого метода. - Установите Среда.Код выхода свойство для кода выхода.Обратите внимание, что метод 1.имеет приоритет - если
Main
метод возвращает все, что угодно, кромеvoid
(являетсяSub
в VB.Net) тогда значение этого свойства будет проигнорировано. - Передайте код выхода в Окружающая среда.Выход способ.Это приведет к немедленному завершению процесса, в отличие от двух других методов.
Важным стандартом, который следует соблюдать, является то, что 0
олицетворяет "Успех".
В смежной теме рассмотрите возможность использования перечисления для определения кодов выхода, которые будет возвращать ваше приложение.Тот Самый Атрибут FlagsAttribute ( Флаги ) позволит вам вернуть комбинацию кодов.
Кроме того, убедитесь, что ваше приложение скомпилировано как "Консольное приложение".
Если вы собираетесь использовать метод, предложенный Дэвидом, вам также следует взглянуть на атрибут [Flags].
Это позволяет вам выполнять побитовые операции с перечислениями.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Тогда
(ExitCodes.SignFailed | ExitCodes.UnknownError)
было бы 16 + 32.:)
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
Просто верните соответствующий код из main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
Используйте ExitCode, если ваш main имеет подпись возврата void, в противном случае вам нужно "установить" ее по возвращаемому вами значению.
Если основной метод возвращает void, вы можете использовать это свойство, чтобы задать код выхода, который будет возвращен в вызывающую среду.Если Main не возвращает void , это свойство игнорируется.Начальное значение этого свойства равно нулю.
В качестве дополнения к книге Скотта Манро ответ:
- В C # 6.0 и VB.NET 14.0 (ПО СРАВНЕНИЮ С 2015 годом) либо Среда.Код выхода или Environment.Exit(Код выхода) требуется для возврата ненулевого кода из консольного приложения.Изменение возвращаемого типа
Main
не имеет никакого эффекта. - В F # 4.0 (ПО СРАВНЕНИЮ С 2015 годом) возвращаемое значение
main
точка входа соблюдается.
Опция перечисления превосходна, однако может быть улучшена путем умножения чисел, как в:
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 и т.д.
Мои 2 цента:
Коды системных ошибок вы можете найти здесь:https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382 (v=против 85).aspx
Вы найдете типичные коды, такие как 2 для "файл не найден" или 5 для "доступ запрещен".
И когда вы натыкаетесь на неизвестный код, вы можете использовать эту команду, чтобы узнать, что это значит:
net helpmsg decimal_code
например ,
чистая помощь msg 1
ВОЗВРАТ
Неправильная функция
Используйте этот код
Environment.Exit(0);
используйте 0 в качестве значения int, если вы не хотите ничего возвращать.