2016-08-04 14 views
3

Ich habe eine Reihe von Aufgaben, die WithCriteria verwenden, um anzugeben, wann diese Aufgabe ausgeführt werden soll. Dieses Kriterium ist in der Hauptmethode Setup des Cake-Skripts festgelegt. Wenn jedoch das Skript ausführen, ich eine NULL-Verweis Ausnahme erhalten ...Wie kann ich globale Variablen innerhalb der `WithCriteria` meiner Kuchenaufgaben verwenden?

enter image description here

Wie Sie ein sehen, die die Pfad Eigenschaft ist null, obwohl in meiner Setup Methode Ich bin Einstellungen dieser Eigenschaft.

Warum ist das? Wie kann ich globale Variablen innerhalb meiner WithCriteria verwenden?

Antwort

2

Das Problem, das Sie haben, ist, weil mit WithCriteria Überladung Sie die Kriterien verwendet werden ausgewertet wird, bevor die Aufgabe ausgeführt wird.

Im Allgemeinen ist dies in Ordnung mit Konstanten/Zustand vor der Ausführung der Aufgabe erstellt.

Mit WithCriteria hat zwei Überlastungen der one Sie verwenden oben

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

Da es eine bool dauert es bewertet ist, als die Aufgaben erstellt, die nicht funktionieren wird, wenn Zustand & während des Setups oder vorherigen geändert erstellt wird Aufgaben, diese Änderung lösen Sie die below Überlastung

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

Diese über~~POS=TRUNC dauert ein Func<bool> Kriterien zu verwenden, um Code zu wh Ich werde kurz vor der Ausführung der Aufgabe ausgewertet und kann somit auf jeden Zustand zugreifen, der vor der Ausführung der Aufgabe erstellt oder geändert wurde.

das Update für Ihr Problem ist also nur ()=> vor Ihren Kriterien hinzufügen und es wird wie folgt faul geladen sein:

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

Danke, funktioniert genau wie beschrieben! –