¿Cómo especifico el código de salida de una aplicación de consola en .NET?

Resuelto MrDatabase asked hace 15 años • 14 respuestas

Tengo una aplicación de consola trivial en .NET. Es sólo una parte de prueba de una aplicación más grande. Me gustaría especificar el "código de salida" de mi aplicación de consola. ¿Cómo hago esto?

MrDatabase avatar Oct 01 '08 06:10 MrDatabase
Aceptado

Tres opciones:

  • Puede devolverlo Mainsi declara su Mainmétodo para devolverlo int.
  • Puedes llamar Environment.Exit(code).
  • Puede configurar el código de salida usando propiedades: Environment.ExitCode = -1;. Esto se usará si nada más establece el código de retorno o usa una de las otras opciones anteriores).

Dependiendo de su aplicación (consola, servicio, aplicación web, etc.), se pueden utilizar diferentes métodos.

TheSoftwareJedi avatar Sep 30 '2008 23:09 TheSoftwareJedi

Además de las respuestas que cubren los retornos... una petición de cordura. Por favor, defina sus códigos de salida en una enumeración, con Banderas si corresponde. Hace que la depuración y el mantenimiento sean mucho más fáciles (y, como beneficio adicional, puedes imprimir fácilmente los códigos de salida en la pantalla de ayuda; tienes uno de esos, ¿verdad?).

enum ExitCode : int {
  Success = 0,
  InvalidLogin = 1,
  InvalidFilename = 2,
  UnknownError = 10
}

int Main(string[] args) {
   return (int)ExitCode.Success;
}
Mark Brackett avatar Oct 01 '2008 03:10 Mark Brackett

Hay tres métodos que puede utilizar para devolver un código de salida desde una aplicación de consola.

  1. Modifique el Mainmétodo en su aplicación para que devuelva un inten lugar de void(una función que devuelve un Integeren lugar de Suben VB.NET ) y luego devuelva el código de salida de ese método.
  2. Establezca la propiedad Environment.ExitCode en el código de salida. Tenga en cuenta que el método 1 tiene prioridad: si el Mainmétodo devuelve algo distinto de void(es a Suben VB.Net), el valor de esta propiedad se ignorará.
  3. Pase el código de salida al método Environment.Exit . Esto finalizará el proceso inmediatamente a diferencia de los otros dos métodos.

Un estándar importante que se debe observar es el que 0representa el "éxito".

En un tema relacionado, considere usar una enumeración para definir los códigos de salida que devolverá su aplicación. FlagsAttribute le permitirá devolver una combinación de códigos.

Además, asegúrese de que su aplicación esté compilada como una 'Aplicación de consola'.

Scott Munro avatar Aug 26 '2012 23:08 Scott Munro

Si va a utilizar el método sugerido por David , también debería echar un vistazo al atributo [Flags].

Esto le permite realizar operaciones bit a bit en enumeraciones.

[Flags]
enum ExitCodes : int
{
  Success = 0,
  SignToolNotInPath = 1,
  AssemblyDirectoryBad = 2,
  PFXFilePathBad = 4,
  PasswordMissing = 8,
  SignFailed = 16,
  UnknownError = 32
}

Entonces

(ExitCodes.SignFailed | ExitCodes.UnknownError)

Sería 16 + 32. :)

Aron Tsang avatar Nov 22 '2011 16:11 Aron Tsang