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:
Main
si vous déclarez votre méthode Main
pour renvoyer int
. Environment.Exit(code)
. 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.
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. Main
renvoie autre chose que void
(est un Sub
dans VB.Net), la valeur de cette propriété sera ignorée. 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. 🙂
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
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:
Main
n’a aucun effet. 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