Comment spécifier le code de sortie d'une application console dans .NET?
Question
J'ai une application console triviale dans .NET. C'est juste une partie de test d'une application plus grande. J'aimerais spécifier le " code de sortie " de mon application console. Comment je fais ça?
La solution
3 options:
- Vous pouvez le renvoyer depuis
Main
si vous déclarez que votre méthodeMain
renvoieint
. - Vous pouvez appeler
Environment.Exit (code)
. - Vous pouvez définir le code de sortie à l'aide des propriétés:
Environment.ExitCode = -1;
. Ceci sera utilisé si rien d'autre ne définit le code de retour ou n'utilise l'une des autres options ci-dessus).
En fonction de votre application (console, service, application Web, etc.), différentes méthodes peuvent être utilisées.
Autres conseils
En plus des réponses concernant le retour des internautes ... un plaidoyer pour la santé mentale. Veuillez définir vos codes de sortie dans un enum, avec des drapeaux si nécessaire. Cela facilite beaucoup le débogage et la maintenance (et, en prime, vous pouvez facilement imprimer les codes de sortie sur votre écran d’aide - vous en avez un, non?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
Il existe trois méthodes que vous pouvez utiliser pour renvoyer un code de sortie d'une application console.
- Modifiez la méthode
Main
dans votre application afin qu'elle renvoie unint
au lieu devoid
(une fonction renvoyant unentier
au lieu deSub
dans VB.Net), puis renvoyez le code de sortie de cette méthode. - Définissez la propriété Environment.ExitCode sur le code de sortie. Notez que la méthode 1. est prioritaire - si la méthode
Main
renvoie autre chose quevoid
(correspond à unSub
dans VB.Net), la valeur de cette propriété sera ignoré. - Transmettez le code de sortie à la méthode Environment.Exit . Cela mettra immédiatement fin au processus, contrairement aux deux autres méthodes.
Une norme importante à respecter est que 0
représente un "succès".
Sur un sujet connexe, envisagez d'utiliser une énumération pour définir les codes de sortie que votre application va renvoyer. Les FlagsAttribute vous permettront de renvoyer une combinaison de codes.
Assurez-vous également que votre application est compilée en tant qu '"application console".
Si vous allez utiliser la méthode suggérée par David, vous devriez également jeter un coup d'oeil à l'attribut [Flags].
Ceci vous permet de faire des opérations peu sages sur des énumérations.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Alors
(ExitCodes.SignFailed | ExitCodes.UnknownError)
serait 16 + 32.:)
System.Environment.ExitCode
http://msdn.microsoft.com/en- us / library / system.environment.exitcode.aspx
int code = 2;
Environment.Exit( code );
Il suffit de renvoyer le code approprié à partir du répertoire principal.
int main(string[] args)
{
return 0; //or exit code of your choice
}
Utilisez ExitCode si votre principal a une signature avec retour nul, sinon vous devez "définir". par la valeur que vous retournez.
propriété Environment.ExitCode
Si la méthode Main retourne void, vous pouvez utiliser cette propriété pour définir le code de sortie qui sera renvoyé à l'environnement appelant. Si Main ne renvoie pas vide, cette propriété est ignorée. La valeur initiale de cette propriété est zéro.
Comme mise à jour de Scott Munro réponse :
- Dans C # 6.0 et VB.NET 14.0 (VS 2015), Environment.ExitCode ou Environment.Exit (exitCode) est requis pour renvoyer un code différent de zéro à partir d'une application console. La modification du type de retour de
Main
n'a aucun effet. - En F # 4.0 (VS 2015), la valeur de retour du point d'entrée
principal
est respectée.
L'option de dénombrement est excellente, mais peut être améliorée en multipliant les nombres comme dans:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Dans le cas d’erreurs multiples, l’addition des numéros d’erreurs spécifiques vous donnera un numéro unique représentant la combinaison des erreurs détectées.
Par exemple, un niveau d'erreur de 6 ne peut contenir que des erreurs 4 et 2, 12 ne peut contenir que des erreurs 4 et 8, 14 ne peut contenir que 2, 4 et 8, etc.
Mes 2 centimes:
Vous pouvez trouver les codes d'erreur du système ici: https://msdn.microsoft. com / fr-fr / bibliothèque / windows / desktop / ms681382 (v = vs.85) .aspx
Vous trouverez les codes typiques, tels que 2 pour "Fichier non trouvé". ou 5 pour "accès refusé".
Et lorsque vous tombez sur un code inconnu, vous pouvez utiliser cette commande pour savoir ce que cela signifie:
net helpmsg decimal_code
par exemple.
net helpmsg 1
retourne
Fonction incorrecte
Utilisez ce code
Environment.Exit(0);
utilisez 0 comme int si vous ne voulez rien retourner.