【问题标题】:How to access command line parameters outside of Main in C#如何在 C# 中访问 Main 之外的命令行参数
【发布时间】:2010-10-19 01:30:21
【问题描述】:

我正在编写一个需要解析进程命令行的 .NET 类。我不想在 Main() 方法和那个类之间有依赖关系。类如何访问命令行?

【问题讨论】:

    标签: .net command-line dependencies


    【解决方案1】:

    致电Environment.GetCommandLineArgs()

    【讨论】:

    【解决方案2】:

    如果你使用 .NET Compact Framework,Environment.GetCommandLineArgs() 方法没有实现并且 System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments 返回总是空字符串,所以 您必须使用 main 函数并将参数传递给您的其他类。

    一个例子:

    [MTAThread]
    static void Main(String[] commandLineArguments)
    {
      CommandLineHelper.parse(commandLineArguments);
    }
    
    public static class CommandLineHelper
    {
      public static void parse(String[] commandLineArguments) {
        // add your code here
      }
    }
    

    【讨论】:

    • 感谢 Compact Framework。在我的情况下,我不想在指定 args 时显示主表单,以便 exe 以静默模式运行,但正如您所建议的,您可以将这些 args 存储在所有形式的静态类中应用。这应该适用于任何框架。对于那些对此感兴趣的人是我的代码。 [MTAThread] static void Main(String[] cmd) { if (cmd.Length == 0) Application.Run(new frmMain());否则 MessageBox.Show(cmd[0]); }
    【解决方案3】:

    创建一个包含应用程序选项的类。在 main 方法中创建该类的实例,使用命令行参数对其进行初始化,并将其传递给需要它的类。

    或者,您可以在之后的任何时间通过使用Environment.GetCommandLineArgs()CustomConfigClass.Create() 方法创建该类来初始化该类。

    第一个选项是我的建议,因为它使类更容易准备单元测试并在以后切换到替代配置方法,而不会由于对命令行的依赖而破坏应用程序。

    【讨论】:

    • 第一个选项仍然需要main方法知道另一个类,所以它没有解决我的问题。我正在使用 IOC 容器,因此我将创建一个公开 GetCommandLineArgs 功能的服务,并使我的其他服务依赖于它。谢谢。
    • 不过,这有点不符合我的意思。如果您使用的是 IoC,则没有返回命令行参数的服务,没有返回配置的服务接口,并使用从命令行获取它的类来实现它。这样你就可以替换为另一个类进行单元测试。
    【解决方案4】:
    System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments
    

    【讨论】:

    【解决方案5】:

    String[] myStr = Environment.GetCommandLineArgs();

    完成这个例子总是好的。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 2016-08-28
      • 2011-01-29
      相关资源
      最近更新 更多