C#中如何从命令行传递自定义的主入口参数

4

我在网上看到有人展示了一些看起来合法的C#代码,可以允许自定义参数通过命令行传递到主方法中。它看起来大致如下:

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

这可以在命令行中使用,例如:
$ myApp hello_world.txt --maxSize 10 --someflag

这真的可能吗,还是有人在开玩笑?


3
C#运行时不知道如何将自定义命令行参数映射到除了string[]之外的任何内容。您可以编写自定义代码将其解析为对象,但不能在Main方法中进行这样的操作。 - gunr2171
哦��根据那个人谈论的方式,我以为这是C# 9中的一个新功能或者什么东西。 - Ben
你有这个示例的源代码吗?例如,他们可能正在使用某种自定义构建步骤将汇编重写为将普通的 Main 翻译成这个东西吗? - Joe Sewell
2
你确定那是 Main() 的唯一重载吗?虽然在一个正确的 Main()Main(string[] args) 旁声明它会产生警告 "warning CS0028: 'Program.Main(FileInfo, int, bool)' has the wrong signature to be an entry point." - Lance U. Matthews
我已经添加了某人发送给我的屏幕截图。 - Ben
这个问题似乎与MSDN杂志文章使用System.CommandLine解析命令行有关。 - DecimalTurn
1个回答

6

您可以使用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)' 的签名不正确,无法作为入口点"。 - vee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接