У мене є тривіальна консольна програма у .NET. Це просто тестова частина більшого додатка. Я хотів би вказати "код виходу" моєї консольної програми. Як це зробити?
У мене є тривіальна консольна програма у .NET. Це просто тестова частина більшого додатка. Я хотів би вказати "код виходу" моєї консольної програми. Як це зробити?
Відповіді:
3 варіанти:
Main
якщо ви оголосите свій Main
метод повернення int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Це буде використано, якщо інше не встановлює код повернення або використовує один із інших параметрів, описаних вище).Залежно від вашої програми (консоль, сервіс, веб-додаток тощо) можна використовувати різні методи.
0
означає успіх, а ненульовий - означає збій. return;
вказує на успіх через код виходу 0
та return -1;
вказує на невдачу.
На додаток до відповідей, що стосуються повернення закордонного ... прохання про розумність. Будь-ласка, будь-ласка, визначте свої вихідні коди в перерахунку, якщо вони потрібні. Це налагоджує налагодження та обслуговування набагато простіше (і, як бонус, ви можете легко роздрукувати вихідні коди на екрані довідки - у вас є один із них, правда?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
випливає з того, що потрібен лише один код успіху, але багато кодів помилок, таких як 0, як немає + або - у цілих комп’ютерних цілях, можна використовувати для унікального визначення успіху
Існує три методи, які можна використовувати для повернення коду виходу з консольного додатка.
Main
метод у вашій програмі так, щоб він повертав int
замість void
(функцію, яка повертає Integer
замість Sub
VB.Net), а потім повертав вихідний код із цього методу.Main
метод повертає щось інше, ніж void
(є Sub
в VB.Net), значення цього властивості буде ігноруватися.Важливим стандартом, якого слід дотримуватися, є те, що 0
являє собою «Успіх».
У відповідній темі розглянемо використання перерахунку для визначення вихідних кодів, які повернеться у вашій програмі. FlagsAttribute дозволить повернути комбінацію кодів.
Також переконайтеся, що ваша програма складена як "Консольна програма".
Environment.ExitCode
не закриває програму відразу, але Environment.Exit
метод негайно закриває програму
Process
об’єкт, ви можете попросити об’єкт WaitForExit()
, а потім попросити код виходу з нього.
Якщо ви збираєтесь використовувати метод, запропонований Девідом, вам слід також ознайомитись з атрибутом [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. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Просто поверніть відповідний код з основного.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Використовуйте ExitCode, якщо ваш основний має недійсний зворотний підпис, інакше вам потрібно «встановити» його за значенням, яке ви повернете.
Властивість Environment.ExitCode
Якщо метод Main повернеться недійсним, ви можете використовувати це властивість для встановлення коду виходу, який буде повернуто в середовище виклику. Якщо Main не повертає недійсних, це властивість ігнорується. Початкове значення цього властивості дорівнює нулю.
В якості оновлення для Скотта Манро відповіді :
Main
не впливає.main
точки введення.Main()
не встановило так, Process.ExitCode
як це бачило викликає додаток.
int Main
все ще можуть бути використані як альтернатива Environment.ExitCode. посилання
Варіант перерахування є відмінним, проте його можна вдосконалити шляхом множення чисел, як у:
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=vs.85).aspx
Ви знайдете типові коди типу 2 для "файл не знайдений" або 5 для "відмовлено у доступі".
І коли ви натрапите на невідомий код, ви можете скористатися цією командою, щоб дізнатися, що це означає:
net helpmsg decimal_code
напр
чиста довідка1
повертає
Неправильна функція
Використовуйте цей код
Environment.Exit(0);
використовувати 0 як int, якщо ви нічого не хочете повернути.