Come è possibile eseguire una determinata attività di pulitura dopo l'esecuzione della destinazione "Test", indipendentemente dal fatto che la destinazione del test abbia avuto esito positivo o negativo (come il costrutto try...finally in C#/Java).provare ... infine equivalente in MsBuild
risposta
L'elemento di destinazione ha un attributo OnError che è possibile impostare su una destinazione da eseguire in caso di errore, ma poiché viene eseguito solo se la destinazione è in errore, risolve solo metà dello scenario.
Avete considerato di concatenare gli obiettivi per rappresentare i "passaggi" di test che si desidera eseguire?
<PropertyGroup>
<TestSteps>TestInitialization;Test;TestCleanup</TestSteps>
</PropertyGroup>
L'obiettivo 'TestInitialization' è dove si può eseguire qualsiasi inizializzazione di test, il target 'Test' esegue il test, l'obiettivo di 'TestCleanup' non alcun tipo di test post ripulire.
Poi, eseguire questi obiettivi utilizzando il compito CallTarget, utilizzando l'attributoRunEachTargetSeparately impostato Vero. Questo eseguirà tutti gli obiettivi, indipendentemente dal successo o dall'errore.
Il campione completo è qui sotto:
<Project DefaultTargets = "TestRun"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<!-- Insert additional tests between TestInitialization and TestCleanup as necessary -->
<PropertyGroup>
<TestSteps>TestInitialization;Test;TestCleanup</TestSteps>
</PropertyGroup>
<Target Name = "TestRun">
<CallTarget Targets="$(TestSteps)" RunEachTargetSeparately="True" />
</Target>
<Target Name = "TestInitialization">
<Message Text="Executing Setup..."/>
</Target>
<Target Name = "Test">
<Message Text="Executing Test..."/>
<!-- this will fail (or should unless you meet the conditions below on your machine) -->
<Copy
SourceFiles="test.xml"
DestinationFolder="c:\output"/>
</Target>
<Target Name = "TestCleanup">
<Message Text="Executing Cleanup..."/>
</Target>
</Project>
Oppure utilizzare <OnError>
per chiamare la destinazione in caso di errore e DependsOnTargets
o CallTarget
per chiamare la stessa destinazione nel caso normale.
- 1. qual è l'esatto ordine di esecuzione per provare, prendere e, infine?
- 2. Strano infine comportamento?
- 3. Elenca tutte le variabili definite di MSBuild - Equivalente all'impostazione
- 4. try, catch, modello, infine, il completamento automatico in IntelliJ
- 5. Infine a volte mi confondo
- 6. Utilizzando infine, invece di cattura
- 7. infine non funziona come previsto
- 8. Come provare Provare per valore Enum?
- 9. dichiarazione di ritorno prima infine
- 10. ordine di esecuzione di try catch e infine blocco
- 11. blocco Iterator genera provare colpa in IL
- 12. Funzioni e provare() in R
- 13. Empty an MSBuild ItemGroup
- 14. Come provare ... finalmente funziona internamente
- 15. Ritorno in try & catch contro return in infine?
- 16. L'aggiunta di ritorno, infine, nasconde l'eccezione
- 17. Double-Loop in msbuild?
- 18. MSBuild NullReferenceException in Microsoft.TeamTest.targets
- 19. Va bene usare try catch inside, infine?
- 20. Scala infine blocco risorsa di chiusura/lavaggio
- 21. Perché scrivere Prova senza cattura o infine?
- 22. Chiudere la connessione e la dichiarazione, infine
- 23. MEF = potrebbe provare frustrazione?
- 24. pitone provare tranne 0
- 25. Hai bisogno di qualche consiglio per provare a simulare un WebClient .NET o equivalente
- 26. Come fingere di provare in Haskell?
- 27. In Python provare fino a nessun errore
- 28. Provare a prendere in cattiva vista?
- 29. Posso provare phpMyAdmin in locale con webmatrix?
- 30. Try/except Python: provare più opzioni
Appena arrivato a testare questo ora, e funziona perfettamente. Grazie per l'esempio piuttosto completo. – ripper234
np! Felice che abbia funzionato! –
Buona risposta, anche se sarebbe bello sapere come 'ripensare', per continuare l'analogia try/finally. Potrebbe essere necessario eseguire la pulizia, a prescindere da cosa, ma la costruzione continua a fallire. –