Передача аргументов командной строки в консольное приложение не работает - PullRequest
0 голосов
/ 08 июня 2018

Я не могу передать аргументы моему консольному приложению.Я попробовал это так:

App.exe arg1
App.exe "arg1"
App.exe

Когда я запускаю приложение с аргументами, приложение перестает работать без каких-либо сообщений.

При отладке в string[] args.

ничего не происходит.

Мой проект на C # представляет собой обычный проект командной строки .net 4.5.2.Моя ОС - Windows 10 x64.

Пример кода:

using System;
using System.Collections.ObjectModel;
using System.Management.Automation;

namespace Setup
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                using (PowerShell psInstance = PowerShell.Create())
                {
                    string cmd = "Set-ExecutionPolicy RemoteSigned -Force; " +
                                 "echo \"Set-ExecutionPolicy RemoteSigned -Force\"; echo \"\"; " +
                                 "Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force; ";

                    psInstance.AddScript(cmd);

                    Collection<PSObject> PSOutput = psInstance.Invoke();

                    Console.WriteLine(psInstance.Streams.Error[0].ErrorDetails.Message);

                    foreach (var item in PSOutput)
                    {
                        if (item != null)
                        {
                            Console.WriteLine(item.BaseObject.ToString());
                        }
                    }
                    Console.ReadLine();
                }
            }
            else
            {
                // Will not work
                Console.WriteLine(args[0]);
            }
        }
    }
}

У кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Я немного упростил ваш код;а именно, теперь мы посмотрим на

public class Program
{
    public static void Main(string[] args)
    {
        int numberOfArguments = args.Length;

        if (numberOfArguments > 0)
        {
            Console.WriteLine($"Count: {numberOfArguments} First: {args[0]}");
        }
        else
        {
            Console.WriteLine("No arguments were passed.");
        }

        Console.ReadLine(); // Keep the console open.
    }
}

, чтобы получить вывод в любом случае.


Запуск этого без каких-либо дальнейших церемоний приведет к

Аргументы не были переданы.

Однако в Visual Studio, перейдя в

Проект -> Свойства -> Отладка

, мы будемТеперь предоставьте несколько строк аргументов команды для отладки.

enter image description here

Запуск программы теперь даст

Количество: 3 Сначала:-first


Для реального использования вы можете запустить приложение (например, из командной строки) следующим образом:

app.exe -one /two three foo

, и оно все равно получит всеаргументов командной строки:

Количество: 4 Первый: -one

0 голосов
/ 08 июня 2018

Будет полезно, если вы сможете поделиться кодом.

Пример программы для вывода аргумента нулевой позиции будет:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(args[0]);
        }
    }
}

Вы можете вызвать его из командной строки

ConsoleApplication1.exe argument1

enter image description here

...