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。
這是對岸同志寫的介紹,很簡短:
Mono项目提供的一个控制台程序辅助包GetOptions – 自由、创新、研究、探索…… – 博客园
這篇也是 Tutorial,寫的很好:The PumaCode.org Blog :: GetOpt style command line processing in C# with Mono.GetOptions