4

Argument<IEnumerable<string>>(または、または何でも - 文字列の反復可能なリスト) を Cake スクリプトに取得したいのですが、それを からにstring[]渡す方法がわかりません。build.ps1cake.exe

これは私がこれまでに持っているものです:

build.ps1 で:

param(
    # ...
    [ValidateSet("Bar", "Baz")]
    [string[]]$Foo
)

# ...

$fooArg = If ($Foo.Count -gt 0) {"-foo=`(`"{0}`"`)" -f [string]::Join("`",`", $Foo)} Else {""}
Invoke-Expression "$CAKE_EXE ... $fooArg"

build.cake で:

var baz = Argument<IEnumerable<string>>("foo", new string[0]);

ただし、これを実行すると、次のエラーが発生します。

複数のビルド スクリプトが指定されています。

実行するビルド スクリプトが見つかりませんでした。
最初の引数がビルド スクリプトのパスである
か、ビルド スクリプトがデフォルトのスクリプト名規則に従う必要があります。

使用法: Cake.exe [build-script] [-verbosity=value] [-showdescription] [-dryrun] [..]

例: Cake.exe 例: Cake.exe build.cake -verbosity=quiet 例: Cake.exe build.cake -showdescription

オプション: -verbosity=value 表示する情報の量を指定します。(Quiet、Minimal、Normal、Verbose、Diagnostic) -showdescription タスクに関する説明を表示します。-dryrun 予行演習を実行します。-version バージョン情報を表示します。-help 使用情報を表示します。-experimental Roslyn スクリプト エンジンのナイトリー ビルドを使用します。

これを行う正しい方法は何ですか?

4

1 に答える 1

7

解決策 #1 (シンプル):

引数を文字列として受け入れて分割するだけで解決できます。

var foo = Argument("foo", string.Empty).Split(',');

解決策 2 (複雑):

文字列配列をカスタム型でラップし、TypeConverterその型の を実装することで、これを解決することもできます。#rラッパーと型コンバーターの両方が、 or#addinディレクティブを介して読み込まれる .NET アセンブリに存在する必要があります。

[TypeConverter(typeof(StringArrayConverter))]
public class StringArray
{
    public string[] Items { get; }
}

public class StringArrayConverter : TypeConverter
{
  // Implementation here :)
}

Argument次に、型で通常どおりエイリアスを使用しますStringArray

var foo = Argument<StringArray>("foo", null);

私の意見では、このオプションは文字列配列を取得するには少し複雑なので、arguments の IEnumerable サポートを追加するまでは、より単純なソリューションを使用することをお勧めします。

于 2016-03-01T22:43:17.510 に答える