Come posso specificare il codice di uscita di un'applicazione console in .NET?
Domanda
Ho una banale applicazione console in .NET. È solo una parte di prova di un'applicazione più grande. Vorrei specificare il " codice di uscita " della mia applicazione console. Come posso farlo?
Soluzione
3 opzioni:
- Puoi restituirlo da
Main
se dichiari il tuoMain
per restituireint
. - Puoi chiamare
Environment.Exit (code)
. - È possibile impostare il codice di uscita utilizzando le proprietà:
Environment.ExitCode = -1;
. Questo verrà usato se nient'altro imposta il codice di ritorno o utilizza una delle altre opzioni sopra).
A seconda dell'applicazione (console, servizio, app Web, ecc.) è possibile utilizzare metodi diversi.
Altri suggerimenti
Oltre alle risposte che riguardano il ritorno int's ... un appello per sanità mentale. Per favore, definisci i tuoi codici di uscita in un enum, con le Bandiere se appropriato. Rende il debug e la manutenzione molto più semplici (e, come bonus, puoi facilmente stampare i codici di uscita nella schermata di aiuto - ne hai uno, giusto?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
Esistono tre metodi che è possibile utilizzare per restituire un codice di uscita da un'applicazione console.
- Modifica il metodo
Main
nella tua applicazione in modo che restituisca unint
invece divoid
(una funzione che restituisce unintero
anzichéSub
in VB.Net) e quindi restituire il codice di uscita da quel metodo. - Imposta la proprietà Environment.ExitCode sul codice di uscita. Nota che il metodo 1. ha la precedenza - se il metodo
Main
restituisce qualcosa di diverso davoid
(è unSub
in VB.Net), allora il valore di questa proprietà verrà ignorata. - Passa il codice di uscita al metodo Environment.Exit . Ciò interromperà immediatamente il processo rispetto agli altri due metodi.
Uno standard importante da osservare è che 0
rappresenta 'Success'.
Su un argomento correlato, considerare l'utilizzo di un'enumerazione per definire i codici di uscita che l'applicazione restituirà. Il FlagsAttribute ti consentirà di restituire una combinazione di codici.
Inoltre, assicurarsi che l'applicazione sia compilata come "Applicazione console".
Se stai per utilizzare il metodo suggerito da David, dovresti anche dare un'occhiata all'attributo [Flags].
Questo ti permette di fare operazioni un po 'sagge sugli enum.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Poi
(ExitCodes.SignFailed | ExitCodes.UnknownError)
sarebbe 16 + 32. :)
System.Environment.ExitCode
http://msdn.microsoft.com/en- us / library / system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
Restituisce semplicemente il codice appropriato da main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
Usa ExitCode se il tuo principale ha una firma di ritorno nulla, altrimenti devi " impostare " dal valore che restituisci.
Proprietà Environment.ExitCode
Se il metodo Main restituisce null, è possibile utilizzare questa proprietà per impostare il codice di uscita che verrà restituito all'ambiente chiamante. Se Main non restituisce nulla, questa proprietà viene ignorata. Il valore iniziale di questa proprietà è zero.
Come aggiornamento di rispondere :
- In C # 6.0 e VB.NET 14.0 (VS 2015), Environment.ExitCode o Environment.Exit (exitCode) è necessario per restituire un codice diverso da zero da un'applicazione console. La modifica del tipo restituito di
Main
non ha alcun effetto. - In F # 4.0 (VS 2015), il valore di ritorno del punto di ingresso
main
è rispettato.
L'opzione di enumerazione è eccellente, tuttavia può essere migliorata moltiplicando i numeri come in:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Nel caso di più errori, sommando i numeri di errore specifici si otterrà un numero univoco che rappresenterà la combinazione di errori rilevati.
Ad esempio, un livello di errore 6 può consistere solo in errori 4 e 2, 12 può consistere solo in errori 4 e 8, 14 può consistere solo in 2, 4 e 8 ecc.
I miei 2 centesimi:
Puoi trovare i codici di errore di sistema qui: https://msdn.microsoft. com / it-it / library / windows / desktop / ms681382 (v = vs.85) aspx
Troverai i codici tipici come 2 per " file non trovato " o 5 per "accesso negato".
E quando ti imbatti in un codice sconosciuto, puoi usare questo comando per scoprire cosa significa:
net helpmsg decimal_code
es.
net helpmsg 1
ritorna
Funzione errata
Usa questo codice
Environment.Exit(0);
usa 0 come int se non vuoi restituire nulla.