5

次のpsakeスクリプトがあります

properties {
    $ApplicationName = "test"
    $ApplicationPath = "c:\this\is\$ApplicationName"
}

Task test {
    "ApplicationName = $ApplicationName"
    "ApplicationPath = $ApplicationPath"
}

アプリケーション パス全体を入力するのを避けるために、ApplicationName のみをスクリプトに渡したいと思います。しかし、-parametersフラグを使用すると、プロパティに変更が適用されません

Invoke-psake .\script.ps1 -parameters @{ApplicationName = "another_test"} test

ApplicationName = test
ApplicationPath = c:\this\is\test

プロパティ ブロックの前にパラメーターを評価する必要があるため、これは正しくないように思えます。-propertiesフラグを使用すると、アプリケーション名は変更されますが、パスは変更されません

Invoke-psake .\script.ps1 -properties @{ApplicationName = "another_test"} test

ApplicationName = another_test
ApplicationPath = c:\this\is\test

したがって、プロパティは既に初期化されていますが、-parametersこの動作をオーバーライドするべきではありませんか?

4

1 に答える 1

8

問題は、プロパティ ブロックの前にパラメーターが評価されることを期待しているが、psake では、プロパティがパラメーターをオーバーライドすることです。

https://github.com/psake/psake/wiki/How-can-I-pass-parameters-to-my-psake-script%3F

properties {
  $my_property = $p1 + $p2
}

ビルド スクリプトの「プロパティ」関数は、Invoke-psake 関数に渡されたパラメーターをオーバーライドできます。上記の例では、パラメーター ハッシュテーブルが @{"p1"="v1";"p2"="v2";"my_property"="hello"} の場合、$my_property は依然として「v1v2」に設定されます。

プロパティをオーバーライドして、psake を変更せずにそのプロパティの更新に基づいて別のプロパティを更新できるかどうかはわかりません。あなたができることは、必要に応じてパスを評価する関数を作成することです:

Function ApplicationPath {"c:\this\is\$ApplicationName"}
于 2014-03-16T23:45:43.897 に答える