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

Tengo una aplicación de consola trivial en .NET. Es solo 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?

3 opciones:

  • Puede devolverlo desde Main si declara que su método Main devuelve int .
  • Puede llamar a Environment.Exit(code) .
  • Puede establecer el código de salida usando propiedades: Environment.ExitCode = -1; . Esto se usará si nada más establece el código de retorno o utiliza una de las otras opciones anteriores).

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

Además de las respuestas que cubren el retorno int … una súplica por cordura. Por favor, defina sus códigos de salida en una enumeración, con indicadores, si corresponde. Hace que la depuración y el mantenimiento sean mucho más fáciles (y, como beneficio adicional, puede imprimir fácilmente los códigos de salida en su pantalla de ayuda; usted tiene uno de esos, ¿no?).

 enum ExitCode : int { Success = 0, InvalidLogin = 1, InvalidFilename = 2, UnknownError = 10 } int Main(string[] args) { return (int)ExitCode.Success; } 

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

  1. Modifique el método Main en su aplicación para que devuelva un int lugar de void (una función que devuelve un Integer lugar de Sub en 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 método Main devuelve algo distinto de void (es un Sub en VB.Net), se ignorará el valor de esta propiedad.
  3. Pase el código de salida al método Environment.Exit . Esto terminará el proceso inmediatamente en comparación con los otros dos métodos.

Un estándar importante que debe observarse es que 0 representa “éxito”.

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

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

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

Esto le permite realizar operaciones de bits en enums.

 [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. 🙂

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

Solo devuelve el código apropiado de main.

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

Use ExitCode si su main tiene una firma de devolución nula, de lo contrario, debe “establecerla” por el valor que devuelve.

Propiedad Environment.ExitCode

Si el método Principal devuelve vacío, puede usar esta propiedad para establecer el código de salida que se devolverá al entorno de llamada. Si Main no devuelve nulo, esta propiedad se ignora. El valor inicial de esta propiedad es cero.

La opción de enumeración es excelente, pero se puede mejorar multiplicando los números de la siguiente manera:

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

En el caso de errores múltiples, agregar los números de error específicos juntos le dará un número único que representará la combinación de errores detectados.

Por ejemplo, un nivel de error de 6 solo puede consistir en los errores 4 y 2, 12 solo puede consistir en los errores 4 y 8, 14 solo pueden consistir en 2, 4 y 8, etc.

Como una actualización de la respuesta de Scott Munro:

  • En C # 6.0 y VB.NET 14.0 (VS 2015), se requiere Environment.ExitCode o Environment.Exit (exitCode) para devolver un código distinto de cero desde una aplicación de consola. Cambiar el tipo de retorno de Main no tiene ningún efecto.
  • En F # 4.0 (VS 2015), se respeta el valor de retorno del punto de entrada main .

Mis 2 centavos:

Puede encontrar los códigos de error del sistema aquí: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

Encontrará los códigos típicos como 2 para “archivo no encontrado” o 5 para “acceso denegado”.

Y cuando tropiezas con un código desconocido, puedes usar este comando para descubrir lo que significa:

 net helpmsg decimal_code 

p.ej

ayuda neta 1

devoluciones

Función incorrecta