Как я могу запустить определенную задачу очистки после запуска моей целевой задачи "Тест", независимо от того, преуспел или не прошел целевой тест (например, try... наконец построить в С#/Java).
Попробуйте... наконец, эквивалент в MsBuild
Ответ 1
Элемент Target имеет атрибут OnError, который вы можете установить для цели для выполнения при ошибке, но поскольку она выполняется только в том случае, если цель имеет ошибку, она разрешает только половину вашего сценария.
Рассматривали ли вы объединение целых целей для представления тестовых "шагов", которые вы хотели бы выполнить?
<PropertyGroup>
<TestSteps>TestInitialization;Test;TestCleanup</TestSteps>
</PropertyGroup>
Цель "TestInitialization" заключается в том, где вы можете выполнить любую инициализацию теста, цель "Test" выполняет тест, цель "TestCleanup" выполняет любой вид посттестирования.
Затем выполните эти цели с помощью задачи CallTarget, используя атрибут RunEachTargetSeparately, установленный на True. Это выполнит все цели, независимо от успеха или сбоя.
Ниже приведен полный образец:
<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>
Ответ 2
Или используйте <OnError>
для вызова вашей цели в случае ошибки и DependsOnTargets
или CallTarget
для вызова одной и той же цели в обычном случае.