Mono.GetOptions 是做什麼的?問的好。
如果你曾經在 Linux 下開發過 console 應用程式,相信你對於getopt這個 library 應該不陌生才對。
Mono.GetOptions 就是一個類似 getopt 的組件。
這裡主要是介紹怎麼使用,下面就列出步驟:
- 安裝Mono。
- 在 AssemblyInfo.cs 裡面加入:
//填入簡單的用法說明,顯示 help 時會用到 [assembly: Mono.UsageComplement("[-t:param] [-o] [-h] [-v] [-u]")] //填入關於這程式的說明,也是顯示 help 時會用到 [assembly: Mono.About("A sample about how to use Mono.GetOptions")] //作者 [assembly: Mono.Author("your_name")] //有錯誤時可以通報誰,可填可不填 [assembly: Mono.ReportBugsTo("your_name@your_domain.com")] //更詳細的說明,可填可不填 [assembly: Mono.AdditionalInfo("This is a sample about how to use Mono.GetOptions. It's only a small program. If you want to know more about Mono.GetOptions, you can hack Mono.GetOptions source code.")] //是屬於哪個套件,可填可不填 [assembly: Mono.IsPartOfPackage("Samples")]
然後在原來的地方應該會有這些:
[assembly: AssemblyTitle("Mono.GetOptions Sample")] [assembly: AssemblyProduct("getoptions_sample")] [assembly: AssemblyCopyright("your_name or your_organization")] [assembly: AssemblyVersion("1.0.*")]
請記得都填入。
- 引用 Mono.GetOptions 組件,用SharpDevelop的話,可以很方便的選 Add mono reference。
- 記得 using Mono.GetOptions。
using Mono.GetOptions;
- 新增一個類別,繼承 Options。
using System.Collections.Generic; class ProgramOptions : Options { private string _outputFolder = "output"; public string OutputFolder { get { return _outputFolder; } set { _outputFolder = value; } } private List _templateFolders; // 表示最多容許兩個,參數可以用 -t 或是 --template // 用法大致是 -t:test 或 --template:test [Option(2, "Template folder, default is 'default'", 't', "template")] public WhatToDoNext DoTemplate( string s ) { //Console.WriteLine( "template={0}", s ); _templateFolders.Add( s ); return WhatToDoNext.GoAhead; } // 預設只容許一個,參數是 -o 或 --output [Option("Output folder, default is 'output'", 'o', "output")] public WhatToDoNext DoOutput( string s ) { //Console.WriteLine( "output={0}", s ); _outputFolder = s; return WhatToDoNext.GoAhead; } public ProgramOptions() { // 表示同時接受 Linux / Windows 的命令列常態用法 this.ParsingMode = OptionsParsingMode.Both; _templateFolders = new List(); } }
- 在 Main 裡面使用剛剛新增的類別:
ProgramOptions options = new ProgramOptions(); options.ProcessArgs(args); foreach( string s in options.TemplateFolders ) Console.WriteLine( "Template folder = {0}", s ); Console.WriteLine( "Output folder = {0}", options.OutputFolder );
就這麼簡單。
- Build 以後,你可以在命令列模式或是 linux 的 console 模式下試試看了~這邊我假設你編譯出來的目的檔是 your_program:
$your_program -h $your_program --help $your_program --template:t1 --template:t2 --output:o1 $your_program -t:t1 -t:t2 -o:o1 $your_program -u $your_program -V $your_program --version
對getopt有興趣的話,可以參考getopt。
這是對岸同志寫的介紹,很簡短:
這篇也是 Tutorial,寫的很好:The PumaCode.org Blog :: GetOpt style command line processing in C# with Mono.GetOptions