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