Отображение справки для утилиты командной строки - PullRequest
1 голос
/ 13 января 2009

У меня есть утилита командной строки, которая получает довольно много загрузок с моего сайта. Я пытаюсь показать использование, когда пользователь использует /? или параметры справки. У меня есть функция ShowUsage (), которая имеет красиво отформатированный текст с доступными параметрами.

Я вижу, что ShowUsage () нормально вызывается из Visual Studio 2008, когда я использую параметры командной строки в свойствах проекта. Однако exe не отображает текст справки при запуске из командной строки. Вот сокращенная версия ShowUsage ():

private static void ShowUsage()
{
    Console.WriteLine(Environment.NewLine);
    Console.WriteLine("Text File Splitter v1.4.1  released: December 14, 2008");
    Console.WriteLine("Copyright (C) 2007-2008 Hector Sosa, Jr");
    Console.WriteLine("http://www.systemwidgets.com");
    Console.WriteLine("");
}

Я пробовал кучу разных вещей из моих поисков в Google, но ни одна из них не работает. Я знаю, что это должно быть что-то простое / легкое, но для жизни я не могу понять это.

EDIT:

Код, который вызывает ShowUsage ():

if (!Equals(cmdargs["help"], null) || !Equals(cmdargs["?"], null))
{
    ShowUsage();
}

У меня есть класс, который анализирует параметры в массиве cmdargs. Я подтвердил, что параметры находятся в массиве. Это что-то внутри ShowUsage (), которое мешает отображению текста.

Я собираюсь попробовать отладочный трюк и посмотреть, что я найду.

Я не использую Console.Out.

d03boy - просто личные предпочтения. Это делает текст менее загроможденным на экране, по крайней мере для меня.

РЕДАКТИРОВАТЬ # 2

Хорошо, еще немного информации ... Я использую VS2008 в Vista Ultimate 64 бит. Я просто проверяю свойства проекта, и для него установлено «Приложение Windows». Эта утилита является 32-разрядной.

Я собираюсь поэкспериментировать с созданием отдельного проекта в решении, которое является настоящей консольной программой, как советуют некоторые из вас.

Ответы [ 2 ]

2 голосов
/ 13 января 2009

Можете ли вы определить "не работает"? Просто ничего не делаешь? Бросать исключение? Я ожидал бы, что проблема в методе Main(...) - т.е. ShowUsage() не вызывается. Другая распространенная проблема - это не восстановление его в правильной конфигурации, поэтому bin/release (или что-то еще) не обновляется.

Вы создали приложение как консольный exe? Т.е. есть ли "Тип выхода" = "Консольное приложение" в свойствах проекта? Это нужно для того, чтобы получить доступ к консоли ...

Для информации, я считаю, что самый простой способ сделать экран справки консоли (когда он выходит за пределы нескольких строк) - это вставить файл .txt в exe; затем я просто записываю текстовый файл (возможно, все еще использующий string.Format, если я хочу заменить токены).

В качестве альтернативы есть альтернативный формат строки:

    Console.WriteLine(@"
Text File Splitter v1.4.1  released: December 14, 2008
Copyright (C) 2007-2008 Hector Sosa, Jr
http://www.systemwidgets.com

");
0 голосов
/ 13 января 2009

Вы перенаправляете Console.Out куда-то еще?

Попробуйте сгенерировать System.Diagnostics.Debugger.Launch () в методе ShowUsage, чтобы вы могли увидеть, попадет ли он во время выполнения.

Можете ли вы воспроизвести проблему с помощью простого exe-файла, принимая только те параметры справки?

...