Каким будет минимальный код шаблона для входной точки приложения консоли С#, который сделает его хорошим человеком?
Когда кто-то выходит, чтобы создать проект Консольное приложение с помощью Visual Studio (до 2008 года на момент написания), вам будет представлен шаблон Program.cs
, который выглядит следующим образом:
class Program
{
static void Main(string[] args)
{
}
}
Есть, однако, несколько вещей, которые каждый должен сделать, чтобы сделать консольное приложение минимально хорошим гражданином. Например, если возникает исключение, выпишите чистое сообщение в стандартную ошибку (Console.Error), а не стандартный вывод (Console.Out). Аналогично, установите код ошибки в ненулевое значение в случае некоторой ошибки, чтобы вызывающие процессы могли обнаруживать сбои.
Каким будет минимальный код шаблона для входной точки приложения консоли С#, который сделает его хорошим человеком? Что бы вы добавили или изменили следующее?
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;
}
}
}
Что делает этот шаблон:
- Если выбрано исключение:
- чистое сообщение печатается со стандартной ошибкой
- прорисовываются все детали.
- код выхода устанавливается на произвольное ненулевое значение (100), если уже установлено
- Трассировка может быть включена динамически через подробный переключатель
- Трассировка отправляется на стандартную ошибку, чтобы не мешать реальному выводу
- При успешном завершении код выхода отражает последнее значение Environment.ExitCode, которое обычно равно нулю, но может быть изменено кодом ниже по течению
-
Program
класс статический
Без цели этого вопроса:
- Идентифицировать аргументы командной строки, обрабатывающие код или библиотеку
- Определите внешнюю библиотеку ведения журнала или трассировки