Comment spécifier le code de sortie d’une application console dans .NET?

J’ai une application de console sortingviale en .NET. C’est juste une partie de test d’une application plus grande. Je voudrais spécifier le “code de sortie” de mon application console. Comment puis-je faire cela?

3 options:

  • Vous pouvez le renvoyer depuis Main si vous déclarez votre méthode Main pour renvoyer int .
  • Vous pouvez appeler Environment.Exit(code) .
  • Vous pouvez définir le code de sortie à l’aide des propriétés: Environment.ExitCode = -1; . Cela sera utilisé si rien d’autre ne définit le code de retour ou n’utilise l’une des autres options ci-dessus.

Selon votre application (console, service, application Web, etc.), différentes méthodes peuvent être utilisées.

En plus des réponses couvrant le retour int … un plaidoyer pour la santé mentale. S’il vous plaît, s’il vous plaît définir vos codes de sortie dans un enum, avec des drapeaux si approprié. Cela facilite 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(ssortingng[] args) { return (int)ExitCode.Success; } 

Il existe trois méthodes que vous pouvez utiliser pour renvoyer un code de sortie à partir d’une application console.

  1. Modifiez la méthode Main dans votre application afin qu’elle renvoie un int au lieu de void (une fonction qui retourne un Integer au lieu de Sub dans VB.Net), puis renvoie le code de sortie de cette méthode.
  2. Définissez la propriété Environment.ExitCode sur le code de sortie. Notez que la méthode 1. a priorité – si la méthode Main renvoie autre chose que void (est un Sub dans VB.Net), la valeur de cette propriété sera ignorée.
  3. Transmettez le code de sortie à la méthode Environment.Exit . Cela mettra fin au processus immédiatement par opposition aux deux autres méthodes.

Une norme importante à observer est que 0 représente le «succès».

Sur un sujet connexe, envisagez d’utiliser une énumération pour définir les codes de sortie que votre application va renvoyer. FlagsAtsortingbute vous permettra de retourner une combinaison de codes.

Assurez-vous également que votre application est compilée en tant qu ‘«application console».

Si vous envisagez d’utiliser la méthode proposée par David, vous devriez également regarder l’atsortingbut [Flags].

Cela vous permet de faire des opérations sur les é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. 🙂

 int code = 2; Environment.Exit( code ); 

Il suffit de retourner le code approprié de main.

 int main(ssortingng[] args) { return 0; //or exit code of your choice } 

Utilisez ExitCode si votre main a une signature de retour vide, sinon vous devez la “définir” par la valeur que vous retournez.

Propriété Environment.ExitCode

Si la méthode Main renvoie void, vous pouvez utiliser cette propriété pour définir le code de sortie qui sera renvoyé à l’environnement appelant. Si Main ne retourne pas vide, cette propriété est ignorée. La valeur initiale de cette propriété est zéro.

L’option d’énumération 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 } 

En cas d’erreurs multiples, l’ajout des numéros d’erreur spécifiques vous donnera un numéro unique qui représentera 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 être que de 2, 4 et 8, etc.

Comme mise à jour de la réponse de Scott Munro:

  • Dans C # 6.0 et VB.NET 14.0 (VS 2015), Environment.ExitCode ou Environment.Exit (exitCode) sont requirejs pour renvoyer un code non nul à partir d’une application console. Changer le type de retour de Main n’a aucun effet.
  • Dans F # 4.0 (VS 2015), la valeur de retour du point d’entrée main est respectée.

Mes 2 centimes:

Vous pouvez trouver les codes d’erreur du système ici: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Vous trouverez les codes typiques comme 2 pour “fichier introuvable” ou 5 pour “access 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

résultats

Fonction incorrecte