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