目前沒有用於「註冊」參數的幫助的內置功能,儘管如此,請提出一個問題。
也就是說可以實現,因爲Cake只是.NET,您可以使用NuGet上可用的命令行解析器之一來實現此目的。一個這樣的解析器是CommandLineParser。
組件可以使用#addin
指令從的NuGet引用,用於CommandLineParser它看起來低於
#addin "nuget:?package=CommandLineParser&version=2.1.1-beta&prerelease=true"
,因爲它不是你需要使用完全限定的類型名稱或就像普通的「原生」蛋糕插件C#添加這樣的使用語句
using CommandLine;
CommandLineParser在屬性中使用類和屬性來提供規則和幫助。移植下面的例子將看起來像下面
class Options
{
[Option("someparameter",
HelpText = "Description of the parameter, that can span multiple lines",
Default = 5)]
public int SomeParameter { get; set; }
[Option("nextParameter", HelpText = "Next description")]
public string NextParameter { get; set; }
[Option("target", HelpText = "Target", Default = "Default")]
public string Target { get; set; }
}
通常CommandLineParser將向控制檯輸出的幫助,但如果你想在一個任務,以顯示它,你可以捕捉與TextWriter
var helpWriter = new StringWriter();
var parser = new Parser(config => config.HelpWriter = helpWriter);
輸出
然後解析參數,如果指定了「MyDocTask」渲染幫助到helpWriter
Options options = parser
.ParseArguments<Options>(
StringComparer.OrdinalIgnoreCase.Equals(Argument("target", "Default"), "MyDocTask")
? new []{ "--help" }
: System.Environment.GetCommandLineArgs()
)
.MapResult(
o => o,
errors=> new Options { Target = "MyDocTask"} // TODO capture errors here
);
和任務
Task("MyDocTask")
.Does(() => {
Information(helpWriter.ToString());
}
);
Task("Default")
.Does(() => {
Information("SomeParameter: {0}", options.SomeParameter);
Information("NextParameter: {0}", options.NextParameter);
Information("Target: {0}", options.Target);
}
);
然後執行
RunTarget(options.Target);
的MyDocTask
將輸出幫助
>> cake .\commandline.cake --Target="MyDocTask"
========================================
MyDocTask
========================================
Cake 0.20.0+Branch.main.Sha.417d1eb9097a6c71ab25736687162c0f58bbb74a
Copyright (c) .NET Foundation and Contributors
--someparameter (Default: 5) Description of the parameter, that can span multiple lines
--nextParameter Next description
--target (Default: Default) Target
--help Display this help screen.
--version Display version information.
和Default
任務會的分析參數,就輸出值
>> cake .\commandline.cake
========================================
Default
========================================
SomeParameter: 5
NextParameter: [NULL]
Target: Default
Task Duration
--------------------------------------------------
Default 00:00:00.0133265
--------------------------------------------------
Total: 00:00:00.0133265
氏s會以相當簡單的方式爲您提供強有力的類型和記錄參數。
完整的蛋糕下面的腳本:
#addin "nuget:?package=CommandLineParser&version=2.1.1-beta&prerelease=true"
using CommandLine;
class Options
{
[Option("someparameter",
HelpText = "Description of the parameter, that can span multiple lines",
Default = 5)]
public int SomeParameter { get; set; }
[Option("nextParameter", HelpText = "Next description")]
public string NextParameter { get; set; }
[Option("target", HelpText = "Target", Default = "Default")]
public string Target { get; set; }
}
var helpWriter = new StringWriter();
var parser = new Parser(config => config.HelpWriter = helpWriter);
Options options = parser
.ParseArguments<Options>(
StringComparer.OrdinalIgnoreCase.Equals(Argument("target", "Default"), "MyDocTask")
? new []{ "--help" }
: System.Environment.GetCommandLineArgs()
)
.MapResult(
o => o,
errors=> new Options { Target = "MyDocTask"} // could capture errors here
);
Task("MyDocTask")
.Does(() => {
Information(helpWriter.ToString());
}
);
Task("Default")
.Does(() => {
Information("SomeParameter: {0}", options.SomeParameter);
Information("NextParameter: {0}", options.NextParameter);
Information("Target: {0}", options.Target);
}
);
RunTarget(options.Target);
我寫的評論,因爲您專門問了一下蛋糕。然而,Nuke提供了這個功能:https://www.nuke.build/command-line.html(我是維護者)。 – Matthias