如何修改CommandlineParser的--version输出为程序集文件版本
让CommandLineParser的--version输出程序集文件版本的简便方法
默认情况下,CommandLineParser组件的--version开关会输出程序集的产品版本(对应AssemblyInformationalVersionAttribute),要改为输出文件版本(对应AssemblyFileVersionAttribute),有两种官方支持的简便方案:
方案一:直接指定版本字符串
在参数解析时,通过WithVersion方法直接传入获取到的文件版本:
using CommandLine; using System.Reflection; class Program { static void Main(string[] args) { // 获取当前程序集的文件版本 var fileVersion = Assembly.GetEntryAssembly() ?.GetCustomAttribute<AssemblyFileVersionAttribute>() ?.Version ?? "Unknown Version"; Parser.Default.ParseArguments<Options>(args) .WithVersion(fileVersion) // 替换默认版本输出内容 .WithParsed(Run); } private static void Run(Options opts) { // 执行业务逻辑 } } public class Options { // 自定义你的命令行选项 }
方案二:自定义版本提供者(复用场景)
如果需要在多个解析逻辑中复用该规则,可以实现IVersionProvider接口:
using CommandLine; using System.Reflection; public class FileVersionProvider : IVersionProvider { public string GetVersion() { return Assembly.GetEntryAssembly() ?.GetCustomAttribute<AssemblyFileVersionAttribute>() ?.Version ?? "Unknown Version"; } }
然后在解析时指定版本提供者:
Parser.Default.ParseArguments<Options>(args) .WithVersionProvider(new FileVersionProvider()) .WithParsed(Run);
这两种方案都无需修改组件源码,直接通过官方扩展方法实现需求,执行--version开关时就会输出程序集的文件版本。
内容的提问来源于stack exchange,提问作者endurium
相关产品推荐
相关产品推荐

