将命令行参数传递给控制台应用程序不起作用

时间:2018-06-08 07:10:13

标签: c# console-application command-line-arguments

我无法将参数传递给我的控制台应用。 我试过这样的话:

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 :(得分:0)

如果您可以共享代码,将会很有帮助。

打印零位置参数的示例程序将是:

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

您可以从命令行

调用它
ConsoleApplication1.exe argument1

enter image description here

答案 1 :(得分:0)

我进一步简化了你的代码;我们现在看看

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中,进入

  

项目 - &gt;属性 - &gt;调试

我们现在将提供一些用于调试的命令参数行。

enter image description here

现在运行程序将产生

  

数:3首先: - 第一次

对于实际使用,您可以运行应用程序(例如从命令行),如下所示:

app.exe -one /two three foo

它仍将获得所有命令行参数:

  

数:4首先: - 一个