Frage

Ich habe ein benutzerdefiniertes Ziel (eine Gruppe von Kopieraufgaben, ua) in meinem Build, ich brauche ein paar Mal anrufen Änderung an verschiedenen Orten zu bewirken. Dies ist jedoch läuft nur das erste Mal, sie genannt wird, nach dem TFS Build das genannte Ziel überspringt.

Der Prozess geht wie folgt vor:

<!-- Copy some files to another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

...

<!-- Copy the above files to yet another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

Im Buildprotokoll, es ist zu sehen, dass das Ziel „Copyfiles“ übersprungen wird, um das zweite Mal aufgerufen wird:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

Warum ist das passiert? Gibt es eine Möglichkeit, das Ziel (oder alle benutzerdefinierten Ziel ich schreibe) zu zwingen, mehrere Male?

laufen
War es hilfreich?

Lösung

Es sollte einmal pro MSBuild Beispiel pro Parametersatz aufgerufen werden. Team Build tut ausgliedern separate Instanzen von MSBuild unter bestimmten Umständen (zB wenn Sie mehr als eine Lösung Konfiguration zur Verfügung stellen). Aber das haben Sie wahrscheinlich nicht helfen.

Mehr für Ihr Szenario, MSBuild eine Aufgabe erneut ausführen, wenn Sie es mit einem anderen Satz von Parametern aufrufen. Wenn Sie das Kopieren von zwei verschiedenen Arten von Dateien, die klingen wie die Funktion, die Sie suchen.

<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=1" />
<!--  ....  -->
<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=2" />

Die andere Lösung ist es, die Funktionalität in eine Aufgabe statt einem Ziel Refactoring. Zwar gibt es noch deklarative vs Verfahrens Macken sind, verhalten sich Aufgaben viel näher an, was Sie denken, die als „Funktion“ von bekannteren Sprachen.

Andere Tipps

Das ist von Entwurf. Die Ziele sollten nicht gedacht als „Methoden“ werden. MSBuild ist mehr deklarative. So verfolgt es Ziele, die ausgeführt wurden und gezielt überspringt solche, die bereits abgeschlossen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top