如何在 C# 中访问 Main 之外的命令行参数
Posted
技术标签:
【中文标题】如何在 C# 中访问 Main 之外的命令行参数【英文标题】:How to access command line parameters outside of Main in C# 【发布时间】:2010-10-19 01:30:21 【问题描述】:我正在编写一个需要解析进程命令行的 .NET 类。我不想在 Main() 方法和那个类之间有依赖关系。类如何访问命令行?
【问题讨论】:
【参考方案1】:致电Environment.GetCommandLineArgs()
。
【讨论】:
GetCommandLineArgs 是 seriously flawed。避免。传播这个词。【参考方案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
【讨论】:
其实这个好像不行。它似乎总是空的。见***.com/questions/344056/…【参考方案5】:String[] myStr = Environment.GetCommandLineArgs();
完成这个例子总是好的。
【讨论】:
以上是关于如何在 C# 中访问 Main 之外的命令行参数的主要内容,如果未能解决你的问题,请参考以下文章