Squeak.ru - шаблоны программирования

Программа не распознает аргументы командной строки

Возможный дубликат:
Как получить командную строку из приложения ClickOnce?

Я работал над консольным приложением и вручную добавил string[] args внутри Main () после того, как я уже проделал кучу другой работы. Это все, что мне нужно сделать, чтобы принять аргументы командной строки? Или мне нужно еще что-то настроить? Я продолжаю делать Console.WriteLine("{0}",args.Length) и получаю ноль независимо от того, что я отправляю после exe ..

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("{0}", args.Length);
    }
}

затем я запускаю ...\setup.exe yes no maybe и получаю 0 для длины. Что еще мне нужно сделать?

БОЛЬШЕ ИНФОРМАЦИИ:

Я попытался прервать работу после установки аргументов командной строки на странице свойств и получил следующую ошибку:

введите описание изображения здесь

Я думаю, что чей-то комментарий о развертывании ClickOnce - моя проблема. Как я могу развернуть VS2010, чтобы это разрешить?

БОЛЬШЕ ИНФОРМАЦИИ:

Я отключил «Параметры безопасности ClickOnce» в разделе «Свойства» -> «Безопасность» и смог успешно выполнить отладку, но когда я нажимаю «Опубликовать», этот параметр автоматически включается снова. Как мне предотвратить это?


  • @DJKRAZE: Не обязательно. Вы можете использовать любой формат аргументов (тире, косой черты, назовите его), и он все равно будет работать. 19.09.2012
  • @Andy: Console.WriteLine(args.Length) тоже не работает? 19.09.2012
  • Ты поступаешь правильно. Прервите работу с отладчиком и проверьте значение args (не забудьте установить аргументы командной строки на странице свойств проекта) 19.09.2012
  • кстати, если у вас есть развертывание clickonce, вы не можете получить доступ к командной строке таким образом 19.09.2012
  • На всякий случай, этот Main () взят из setup.exe, верно? 19.09.2012
  • @HenkHolterman Да, setup.exe - это результат моей публикации в VS2010, а Main находится внутри class Program {} .. Я обновлю свой вопрос, включив это. 19.09.2012
  • Вы пробовали использовать Environment.GetCommandLineArgs()? 19.09.2012
  • Речь идет о ClickOnce. См. Связанный дубликат. 20.09.2012
  • Вероятно, вам нужно указать URL-адрес. Отметьте stackoverflow.com/questions/429351/ 20.09.2012
  • О том, как отключить ClickOnce, я предлагаю вам создать для этого новый вопрос. 20.09.2012
  • @HenkHolterman, вы правы, это ClickOnce, но я прочитал дубликат и ссылки справки и не могу понять, как использовать ActivationArguments.ActivationData для получения аргументов .. Доступны ли аргументы, переданные в setup.exe, каким-либо образом через этот класс? 20.09.2012
  • Когда вам нужны аргументы? Во время развертывания или позже, когда приложение запускается локально? У @prashanth есть еще одна ссылка. 20.09.2012
  • Позже, когда он будет запущен. На самом деле я развертываюсь в общем каталоге и запускаю его через командную строку с другого компьютера (используя параметр публикации только в сети в VS). Все было замечательно, пока я не захотел добавить аргументы командной строки .. 20.09.2012

Ответы:


1

Этот пример:

using System;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Number of command line parameters = {0}", args.Length);
            for (int i = 0; i < args.Length; i++)
            {
                Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
            }
        }
    }
}

При выполнении как ConsoleApplication1.exe a b c выводится:

Number of command line parameters = 3
Arg[0] = [a]
Arg[1] = [b]
Arg[2] = [c]

См. Руководство по параметрам командной строки

Обновление: этот код

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("{0}", args.Length);
    }
}

При исполнении как ConsoleApplication1.exe a b c выходов

3

Прежде всего, убедитесь, что вы запускаете правильный .exe.

19.09.2012
  • единственное отличие от того, что у меня есть, это то, что вы используете internal для class Program и private для static void Main(string[] args). Повлияют ли это вообще на мою ситуацию? 20.09.2012
  • Нет, эти модификаторы не повлияют на результат; см. обновленный пример в моем ответе. Я предлагаю вам начать новый консольный проект и вставить приведенный выше код. Также убедитесь, что вы действительно передаете параметры. Я использовал cmd.exe и запустил сгенерированный EXE-файл в командной строке. 20.09.2012
  • Я обнаружил, что это происходит из-за развертывания ClickOnce. Я передаю параметры в setup.exe, а не в свой скомпилированный .exe ... 20.09.2012
  • Да, я тоже добавил этот намек к своему ответу. 20.09.2012
  • Думаю, ответ объясняет, что ему нужно сделать, чтобы принять аргументы командной строки. О том, как передать их с помощью ClickOnce, может помочь этот ответ. 20.09.2012
  • Это правильно, потому что я нацелился не на тот .exe. Я вообще не знал достаточно о ClickOnce, поэтому мой вопрос имеет своего рода паутинку в вопросе о таргетинге ClickOnce / .exe. Я пытаюсь исследовать ClickOnce прямо сейчас и при необходимости придумать лучший вопрос. Я немного новичок в задаче вопросов SOF, так что мне делать, когда мой вопрос полностью изменится, удалить исходный вопрос? Извините, пытаюсь выполнить работу и одновременно следовать протоколу SOF, ха-ха 20.09.2012

  • 2

    Возможно, вы можете сделать что-то подобное в цикле for, чтобы проверить, какие значения, если какой-либо из аргументов команды

    public class CountCommandLineArgs
    {
       public static void Main(string[] args)
       {
           Console.WriteLine("Number of command line parameters = {0}",
              args.Length);
           foreach(string s in args)
           {
              Console.WriteLine(s);
           }
       }
    }
    
    19.09.2012
  • Когда args.Lenght == 0 тогда это не будет писать много. 19.09.2012
  • предполагая, что он не передает параметры командной строки, вы правы, но я исхожу из предположения, что он передает параметры в соответствии с MSDN, это один из подходов msdn.microsoft.com/en-us/library/aa288457%28v=vs.71%29.aspx 20.09.2012
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...