попробуй ... наконец-то эквивалент в MsBuild - PullRequest
12 голосов
/ 21 августа 2009

Как я могу запустить определенную задачу очистки после выполнения моей цели "Тест", независимо от того, успешно ли цель Теста прошла успешно (например, конструкция try ... finally в C # / Java).

Ответы [ 2 ]

13 голосов
/ 22 августа 2009

Элемент 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>
0 голосов
/ 03 сентября 2009

Или используйте <OnError> для вызова вашей цели в случае ошибки и DependsOnTargets или CallTarget для вызова вашей же цели в обычном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...