【问题标题】:Program won't recognize command line arguments [duplicate]程序无法识别命令行参数[重复]
【发布时间】:2012-09-20 04:40:55
【问题描述】:

可能重复:
How to get command line from a ClickOnce application?

我正在开发一个控制台应用程序,并在我已经完成了许多其他工作之后手动在 Main() 中添加了 string[] args。这就是我接受命令行参数所要做的一切吗?还是我还需要在其他地方配置一些东西?我一直在做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:没必要。您可以使用任何格式的参数(破折号、斜杠、命名),它仍然可以工作。
  • @Andy:Console.WriteLine(args.Length) 也不行吗?
  • 你做对了。中断调试器并检查 args 的值(不要忘记从项目属性页面设置命令行参数)
  • 顺便说一句,如果你有clickonce部署,你不能用那种方式访问​​命令行
  • 只是为了确定,这个 Main() 来自 setup.exe,对吧?

标签: c# .net command-line-arguments


【解决方案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]

Command Line Parameters Tutorial

更新:这段代码

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

当作为ConsoleApplication1.exe a b c 输出执行时

3

最重要的是,请确保您正在执行正确的 .exe。

【讨论】:

  • 与我所拥有的唯一区别是您使用 internal 代表 class Programprivate 代表 static void Main(string[] args)。这些会影响我的情况吗?
  • 不,那些修饰符不会影响结果;请参阅我的答案中的更新示例。我建议你开始一个新的控制台项目并粘贴上面的代码。另外,请确保您实际上是在传递参数。我使用 cmd.exe 并在命令提示符下运行生成的 .exe 文件。
  • 我发现这是因为 ClickOnce 部署而发生的。我将参数传递给 setup.exe,而不是我编译的 .exe...
  • 对,我也在答案中添加了这个提示。
  • 这是正确的,因为我的目标是错误的 .exe。我对 ClickOnce 的了解还不够,所以我的问题有点像蜘蛛网,变成了 ClickOnce 安全/.exe 目标问题。我现在正在尝试研究 ClickOnce,并在必要时提出一个更好的问题。我对SOF提问有点陌生,所以当我的问题完全改变时,我该怎么办,删除原来的问题?抱歉,在努力完成工作的同时遵循 SOF 协议,哈哈
【解决方案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);
       }
   }
}

【讨论】:

猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 2021-11-25
  • 2018-07-05
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多