2017-10-16 3 views
1

Ich verwende Cake 0.23.0 und war glücklich zu lesen, dass Aufgabenabhängigkeiten erweitert wurden. Leider scheint selbst die neueste Version mein Problem nicht zu lösen. Oder mache ich gerade etwas falsch?Erstellen Sie eine Tasksequenz in Cakebuild

Was würde ich

  • erreichen möchte Gesetzt Ich habe Aufgaben definiert, die für mehrere Plattformen gleich sind (zB x86 oder x64)
  • Ich möchte einen build-Sequenz definieren, die erste ist, Ausführen aller Aufgaben für die Plattform x86. Sobald das erledigt ist, sollte eine Init-Task ausgeführt werden, die nur die Plattform auf x64 setzt und dann dieselben Aufgaben wie für x86 ausgeführt werden sollen.
  • Beispielsequenz: Task-Init x86 -> Task A -> Task B -> Task C -> Task Init x64 -> Task A -> Task B -> Task C

Current Behavior Die resultierende Sequenz ist Task Init X 86 -> Task A -> Task B -> Task C -> Task Init X 64

Es scheint, dass Cake nur Aufgabenabhängigkeit einmal respektiert. Ich habe es unten definiert mag gezeigt:

Task("Compile-All-Platforms") 
    .IsDependentOn("Init-86") 
    .IsDependentOn("A") 
    .IsDependentOn("B") 
    .IsDependentOn("C") 
    .IsDependentOn("Init-x64") 
    .IsDependentOn("A") 
    .IsDependentOn("B") 
    .IsDependentOn("C"); 

Antwort

1

Wenn Sie in zwei großen Schritten aufbauen wollen, die naive Art und Weise, es zu tun, um die Build-Logik von A, B und C in Hilfsfunktionen würde einkapseln und sie dann wickelt in x86 oder x64 Aufgaben. Die Idee hier ist, den Abhängigkeitenbaum zu nutzen, den Cake für Sie erstellen kann, anstatt alle Abhängigkeiten in Compile-All aufzuschreiben. Das ist der Hauptgrund, warum Sie Build-Orchestratoren verwenden möchten.

Zugegeben, dies ist ein einfacher Weg, um es für 3 Aufgaben und 2 Plattformen arbeiten zu lassen. Eine viel besser skalierbare Lösung wäre das Erstellen und Add-In oder ein Hilfsskript, das einen "Plattform" -Parameter akzeptiert und N Projekte erstellt.

Beachten Sie, dass der untenstehende Code lediglich zeigt, wie Sie das erhalten, was Sie angefordert haben, aber mit den entsprechenden Anweisungen WithCriteria verbessert werden muss. Wenn du es so nimmst, kannst du nur x64 bauen.

Task("Compile-x86"){ 
    BuildA(); 
    BuildB(); 
    BuildC(); 
}; 

Task("Init-x64") 
    .IsDependentOn("Compile-x86"){ 
    //Your init code goes here 
}; 

Task("Compile-x64") 
    .IsDependentOn("Init-x64"){ 
    BuildA(); 
    BuildB(); 
    BuildC(); 
}; 

Task("Compile-All-Platforms") 
.IsDependentOn("Compile-x64"); 
+0

Hallo Renaud, Vielen Dank für Ihre Antwort. Ich dachte, ich könnte die Anzahl der Aufgaben und Funktionen minimieren. Im Grunde würden die Funktionen die Arbeit tun, die ich brauche. Ich würde vorschlagen, die Dokumentation zu verbessern, denn für mich war es nicht klar, dass C# Make verhält sich so, bis ich in Schwierigkeiten geriet. –

+0

... und eine andere wichtige Sache sollte in der Dokumentation für Neulinge besser hervorgehoben werden: Wenn Sie "WithCriteria" in einer Aufgabe verwenden, deren Abhängigkeiten wie "IsDependentOn ..." definiert sind, werden die Aufgaben ausgeführt, obwohl die Kriterien der Abhängiger ist nicht erfüllt. Sobald Sie das wissen, können Sie damit umgehen. –

+1

Sie könnten Ihre Kommentare wahrscheinlich unter https://cakebuild.net/ einreichen, da ich kein Cake-Mitarbeiter bin. Wenn Ihre Build-Schritte komplex genug sind, könnten Sie (sollten?) Cake-Erweiterungsmodule verwenden, um jeden Build-Schritt zu kapseln. Sie können es in einer Methode zweimal aufrufen und die Konfiguration zwischen den Anrufen ändern. Aber dann hätten Sie ein monolithisches Build-Skript, obwohl ich mir ziemlich sicher bin, dass Sie mit mehr Schritten besser dran sind, indem Sie die Aufgabenabhängigkeiten nutzen. Beachten Sie, dass wir die tatsächliche Komplexität Ihres Systems nicht kennen. Diese Antwort wird als selbstverständlich vorausgesetzt, Sie haben 3 Projekte mit 2 Zielplattformen. –

Verwandte Themen