2016-08-04 6 views
3

WithCriteriaを使用して、そのタスクをいつ実行するかを指定する多くのタスクがあります。この基準は、CakeスクリプトのメインのSetupメソッドで確立されています。ただし、スクリプトを実行するときに、私は見るあなたのよう私のCake Tasksの「WithCriteria」内でグローバル変数を利用するにはどうすればよいですか?

enter image description here

... null参照の例外を取得し、パスのプロパティが私のSetupメソッド内で、私はそのプロパティの設定をしていていても、nullです。

これはなぜですか?

WithCriteriaでグローバル変数を使用するにはどうすればよいですか?

答えて

2

あなたが持っている問題は、タスクが実行される前に基準を使用しているWithCriteria過負荷で評価されるためです。

一般に、これはタスクが実行される前に作成された定数/状態で問題ありません。 WithCriteria

は、状態がセットアップまたは以前の時に変更&を作成した場合は動作しませんどの、タスクが作成されたとして、それが評価されていますboolを取るとoneあなたは

public static CakeTaskBuilder<T> WithCriteria(
     this CakeTaskBuilder<T> builder, 
     bool criteria 
) 

の上に使用している2つのオーバーロードがありますあなたはこれがロード上でWH Func<bool>基準を取るbelow過負荷

public static CakeTaskBuilder<T> WithCriteria(
     this CakeTaskBuilder<T> builder, 
     Func<bool> criteria 
) 

を使用するコードこの変更を解決するためのタスク、タスクが実行される直前に評価されるため、タスクの実行前に作成または変更された状態にアクセスできます。

だからあなたの問題に対する修正は自分の判断基準の前()=>を追加することであり、それは怠惰になるだろうが、このようにロードされた:

Task("Test-NUnit") 
    .WithCriteria(()=>DirectoryExists(parameters.Paths.Directories.NUnitTestResults)) 
    .Does(()=> 
{ 
}); 
+0

おかげで、説明したとおりに動作します! –

関連する問題