2016-08-04 51 views
3

我有一些任務使用WithCriteria來指定何時應該運行該任務。該標準在Cake腳本的主要Setup方法中建立。然而,在執行腳本時,我得到一個空引用異常......如何在我的Cake任務的`WithCriteria`中使用全局變量?

enter image description here

正如你看到的,路徑屬性爲空,即使我Setup方法中,我設置該屬性。

這是爲什麼?

如何在我的WithCriteria內使用全局變量?

回答

2

您遇到的問題是因爲使用WithCriteria重載,您使用的標準在任務執行前被評估。

一般來說,在執行任務之前創建的常量/狀態可以。

隨着WithCriteria有兩個重載的one你使用上述

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

,因爲它需要一個bool的任務創建它的評估,如果創建&設置或以前期間發生變化狀態,這是行不通的任務,要解決這個改變你的代碼使用below超載

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

這種過度負荷需要Func<bool>標準Wh是在執行任務之前對其進行評估,因此可以訪問任務執行前創建或修改的任何狀態。

因此,對於你的問題的解決方法是隻需添加()=>您的標準之前,這將是懶加載這樣的:

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

感謝,工程完全按照說明! –