【问题标题】:set default command line option value at runtime在运行时设置默认命令行选项值
【发布时间】:2013-11-15 16:00:49
【问题描述】:

我正在使用CommandLine Parser Library 来解析应用程序中的命令行参数。

在大多数情况下,有一些选项在用户每次运行应用程序时都是相同的。通常,我使用 DefaultValue 属性,这样如果用户不提供值,就会使用默认值。

[Option('a', "address", DefaultValue = "http://me.com", Required = false, HelpText = "Address of server.")]
public string Address{ get; set; }

我面临的问题是默认值是特定于给定部署的,需要在部署后进行配置。我希望用户/管理员能够使用配置文件设置这些选项的默认值。

有谁知道如何在运行时更改选项的默认值?然后在启动应用程序时,我可以加载配置文件并相应地设置默认值。

【问题讨论】:

  • @YaugenVlasau 该问题显示了我如何检索分配给属性的值,而不是如何更改它。我尝试修改检索到的属性的值,但没有效果。
  • 我知道您发布此内容已经有一段时间了,但我正在尝试做同样的事情。你有什么解决办法吗?

标签: c# command-line command-line-arguments command-line-parser


【解决方案1】:

我会将属性创建为应用程序设置,然后允许用户使用命令行参数覆盖它们并在运行时计算结果值。 通过这种方式,您已经编译了默认值,用户可以在配置文件中使用自定义默认值进行覆盖,并且可以在启动时设置一次性覆盖。

【讨论】:

  • 是的,这就是我想要做的(我试图在问题中解释的内容)。问题是如何使用命令行解析器库完成命令行解析(因此运行的默认值)。
  • 我尝试了这种方法,但是 Property.Settings.Default 中的值不是常量表达式,不能用作属性值。
【解决方案2】:

为了其他人的利益,我今天遇到了同样的问题,我意识到 Options 与 C# 6 Auto Property Initializers 配合得很好。

[Option]
public string MyProperty { get; set; } = Properties.Settings.Default.MySetting;

毫无疑问,在 C# 5 及更早版本中,您可以使用私有支持属性实现相同的目标。

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多