使用带有自定义 Main() 签名的 System.CommandLine

Posted

技术标签:

【中文标题】使用带有自定义 Main() 签名的 System.CommandLine【英文标题】:Using System.CommandLine with custom Main() signature 【发布时间】:2021-12-01 09:07:45 【问题描述】:

我正在尝试使用System.CommandLine,并且我已经安装了 nuget 包:

Install-Package System.CommandLine -Version 2.0.0-beta1.21308.1

根据this Microsoft article,我应该能够用我的签名编写一个 Main() 方法,它应该会自动神奇地工作:

static void Main(FileInfo input, FileInfo output)

    Console.WriteLine($"Hello World! input output");

但是我的 Main() 方法签名被拒绝,我得到CS5001: Program does not contain a static 'Main' method suitable for an entry point

我做错了吗?根据文章,System.CommandLine 应该是这样工作的。

【问题讨论】:

您使用的是什么版本的 C# 语言?您尝试使用的功能称为"Top level statements",是在 c# 9 中引入的。 我使用的是 .NET 5.0,根据***.com/questions/19532942/…,它决定了 C# 版本应该是 9.0 你关注the instructions for using DragonFruit了吗? 谢谢,我需要运行Install-Package System.CommandLine.DragonFruit -Version 0.3.0-alpha.21216.1,现在它可以工作了。您能否将其添加为答案,以便我接受? 【参考方案1】:

确保以 .NET 5.0 为目标,并在包管理器控制台中运行以下 2 个命令:

Install-Package System.CommandLine -Version 2.0.0-beta1.21308.1
Install-Package System.CommandLine.DragonFruit -Version 0.3.0-alpha.21216.1 

之后它应该可以工作了。


说明:为了使用System.CommandLine,还需要安装一个名为DragonFruit的NuGet包。

正是这个包启用了自定义命令行参数。

详情请看这里:https://github.com/dotnet/command-line-api/blob/main/docs/DragonFruit-overview.md

另外请注意,您还需要 C# 版本 9 或更高版本来支持 Top-Level Statements,但您已确认您正在使用它 - 我在这里为其他读者提及它。

【讨论】:

以上是关于使用带有自定义 Main() 签名的 System.CommandLine的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义 Malloc 函数的 CppCheck

SSLHandshake 使用自签名根证书失败 (-9808)

在设备上退出 system.img

需要带有 npm 和 typescript 的自定义模块

如何使用 OpenSSL 生成带有 SubjectAltName 的自签名证书? [关闭]

带有自定义标头和声明的 jsonwebtoken