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?
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?
Respuestas:
3 opciones:
Main
si declara su Main
método de devolución int
.Environment.Exit(code)
.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 usar diferentes métodos.
0
significa éxito y no cero significa error. return;
indica éxito a través del código de salida 0
e return -1;
indica falla.
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 Banderas 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 la pantalla de ayuda; tiene uno de esos, ¿verdad?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
proviene del hecho de que solo se necesita un código de éxito, pero se pueden usar muchos códigos de error, como 0, que no tiene + o - en los enteros de la computadora, para identificar el éxito de manera única
Hay tres métodos que puede usar para devolver un código de salida de una aplicación de consola.
Main
método en su aplicación para que devuelva un en int
lugar de void
(una función que devuelve un en Integer
lugar de Sub
en VB.Net) y luego devuelva el código de salida de ese método.Main
método devuelve algo que no sea void
(es a Sub
en VB.Net), el valor de esta propiedad se ignorará.Un estándar importante que debe observarse es que 0
representa el "éxito".
En un tema relacionado, considere usar una enumeración para definir los códigos de salida que su aplicación va a devolver. El FlagsAttribute le permitirá volver una combinación de códigos.
Además, asegúrese de que su aplicación se compila como una 'Aplicación de consola'.
Environment.ExitCode
no cierra el programa de inmediato, pero el Environment.Exit
método lo cierra de inmediato
Process
objeto, puede solicitarle el objeto WaitForExit()
y luego solicitarle el código de salida.
Si va a utilizar el método sugerido por David, también debe echar un vistazo al Atributo [Banderas].
Esto le permite realizar operaciones poco sabias en las 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. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Simplemente devuelva el código apropiado de main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Utilice ExitCode si su principal tiene una firma de devolución nula, de lo contrario, debe "establecerla" por el valor que devuelve.
Propiedad Environment.ExitCode
Si el método Main devuelve void, puede usar esta propiedad para establecer el código de salida que se devolverá al entorno de llamada. Si Main no devuelve void, esta propiedad se ignora. El valor inicial de esta propiedad es cero.
Como una actualización de la respuesta de Scott Munro :
Main
no tiene ningún efecto.main
se respeta el valor de retorno del punto de entrada.Main()
no configuró el Process.ExitCode
que ve la aplicación de llamada.
int Main
que todavía se puede usar como una alternativa a Environment.ExitCode. enlace
La opción de enumeración es excelente, sin embargo, puede mejorarse multiplicando los números como en:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
En el caso de múltiples errores, 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 puede consistir en 2, 4 y 8, etc.
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 te topas 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
Usa este código
Environment.Exit(0);
use 0 como int si no desea devolver nada.