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 puis-je faire cela?
3 options:
Main
si vous déclarez votre méthode Main
pour renvoyer int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Ceci sera utilisé si rien d'autre ne définit le code de retour ou n'utilise l'une des 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 les retours, un plaidoyer pour la santé mentale. Veuillez définir vos codes de sortie dans un enum, avec des drapeaux si nécessaire. Cela facilite énormément 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, n’est-ce pas?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
Vous pouvez utiliser trois méthodes 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 renvoie un Integer
au lieu de Sub
dans VB.Net. ) puis renvoyer 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 à respecter 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. Le FlagsAttribute vous permettra 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'œil à l'attribut [Flags].
Cela vous permet de faire des opérations sages sur des enums.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Ensuite
(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 de main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
Utilisez ExitCode si votre main a une signature avec retour nul, sinon vous devez la "régler" en fonction de 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.
Pour mettre à jour Scott Munro réponse :
Main
n'a aucun effet.main
est respectée.L'option de dénombrement est excellente, mais peut être améliorée en multipliant les nombres comme suit:
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'erreur spécifiques ensemble 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 consister que d'erreurs 4 et 2, 12 ne peut contenir que des erreurs 4 et 8, 14 ne peut comprendre que 2, 4 et 8, etc.
Mes 2 centimes:
Vous pouvez trouver les codes d'erreur 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 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.
aide nette 1
résultats
Fonction incorrecte
Utilisez ce code
Environment.Exit(0);
utilisez 0 comme int si vous ne voulez rien retourner.