【问题标题】:Custom main entry point parameters from the command line in C#从 C# 中的命令行自定义主入口点参数
【发布时间】:2020-12-16 17:41:14
【问题描述】:

我在网上的某个地方看到有人展示了似乎是有效的 C# 代码。它允许主方法中的自定义参数作为命令行参数传递。它看起来像这样:

static void Main(FileInfo input, int maxSize = 9, bool someflag = false)
{
    // code
}

这可以像这样在命令行中使用:

$ myApp hello_world.txt --maxSize 10 --someflag

这真的可能吗,还是有人在拉我的腿?

【问题讨论】:

  • c# 运行时不知道如何将自定义命令行参数映射到 string[] 以外的任何内容。您可以编写自定义代码将其解析为对象,但不能在 Main 方法上。
  • 嗯,我以为这是 C# 9 中的一个新功能或其他什么,从那家伙谈论它的方式来看
  • 你有这个例子的来源吗?例如。也许他们正在使用某种自定义构建步骤将程序集重写为将普通 Main 转换为 this?
  • 你确定这是Main()的唯一重载吗?虽然,在正确的 Main()Main(string[] args) 旁边声明会产生警告“警告 CS0028: 'Program.Main(FileInfo, int, bool)' 有错误的签名作为入​​口点。”
  • 我添加了别人发给我的截图

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


【解决方案1】:

是的,您可以使用 DragonFruit,这是 dotnet CLI 的(当前)alpha 功能。

string[] 参数解释为行为已成为开发人员的任务。用户是否寻求帮助?他们是否传递了无效的输入?如果输入不是string,是否可以将输入转换为您需要的类型?这些问题不是为你解决的。

如果你可以声明一个强类型的Main 方法会怎样?这是导致创建名为“DragonFruit”的实验应用模型的问题,它允许您创建一个具有各种类型的多个参数并使用默认值的入口点 [...]

这里有一个教程: https://github.com/dotnet/command-line-api/blob/main/docs/Your-first-app-with-System-CommandLine-DragonFruit.md

【讨论】:

  • 构建并得到这个错误:“Program.Main(int, bool, FileInfo)' 有错误的签名作为入​​口点”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 2011-01-07
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多