¿Cuál sería el mínimo código repetitivo para una aplicación de consola de punto de entrada de C# que haría un buen comportamiento ciudadano?mínimo, buen ciudadano, C# aplicación de consola repetitivo
Cuando alguien va a crear un proyecto aplicación de consola utilizando Visual Studio (hasta el año 2008 en el momento de la escritura), se le presentará con un texto modelo Program.cs
que tiene este aspecto:
class Program
{
static void Main(string[] args)
{
}
}
Hay son, sin embargo, algunas cosas que todo el mundo tiene que hacer para que una aplicación de consola sea mínimamente buen ciudadano. Por ejemplo, si se produce una excepción, escriba un mensaje limpio en el error estándar (Console.Error) y no en la salida estándar (Console.Out). Del mismo modo, establezca el código de error en un valor distinto de cero en el caso de algún error para que los procesos de llamada puedan detectar fallas.
¿Cuál sería el mínimo código repetitivo para una aplicación de consola de punto de entrada de C# que haría un buen comportamiento ciudadano? ¿Qué agregarías o cambiarías a lo siguiente?
using System;
using System.Diagnostics;
using System.Linq;
static class Program
{
static void Run(string[] args)
{
// TODO Replace line-echoing sample with actual application code
string line;
while ((line = Console.ReadLine()) != null)
Console.WriteLine(line);
}
static int Main(string[] args)
{
// TODO Use a more robust arguments parser
if (args.Any(arg => arg.Equals("/v") || arg.Equals("-v"))) // verbose?
Trace.Listeners.Add(new ConsoleTraceListener(true));
try
{
Run(args);
return Environment.ExitCode;
}
catch (Exception e)
{
Console.Error.WriteLine(e.Message);
Trace.TraceError(e.ToString());
return Environment.ExitCode != 0
? Environment.ExitCode : 100;
}
}
}
Lo que este texto modelo logra:
- Si se produce una excepción:
- un mensaje limpio se visualiza como error estándar
- los detalles completos se trazan
- la el código de salida se establece en un valor arbitrario distinto de cero (100) a menos que ya esté configurado
- rastreo se puede activar de forma dinámica a través de un interruptor detallado
- rastreo se envía al error estándar para no interferir con la salida verdadera
- Al finalizar con éxito, el código de salida refleja el último valor Environment.ExitCode , que es por lo general cero, pero se puede cambiar por código aguas abajo
Program
clase es estática
no-objetivos de esta pregunta:
- Identificar argumentos de línea de comandos código de manejo o biblioteca
- identificar un registro externo o trazado biblioteca
Una es la cuestión? :) En serio, deberías haberlo metido un poco en una pregunta. Y tal vez una respuesta. –
La pregunta está en negrita. –
En negrita, sí. Y 20 líneas abajo. –